Rogue Wave バナー
前へマニュアルの先頭へ目次次へ

15.4 警告

以上述べてきた方法には、次のような問題があります。

マニピュレータは書式の指定を読み取り保存します。挿入子は、それを取り出して使用します。この場合、書式設定文字列の所有者は誰なのか、誰がその作成、削除、寿命の制御の責任を取るのかという問題があります。マニピュレータや挿入子は共有されるため、所有者にはなりません。

この問題は、入出力ストリームのユーザーが、書式設定の指定を作成して削除することで解決します。マニピュレータには、書式設定文字列に対するポインタだけが渡り、このポインタだけが pword() で保存されます。書式設定文字列もコピーしません。誰 (マニピュレータや挿入子) がコピーの削除の責任を取るのか明確ではないためです。したがって、挿入子が対応している限り、書式設定文字列が有効であることを保証するために、入出力ストリームのユーザーは、書式設定文字列の寿命を監視する必要があります。

この場合、日付の書式が定数でなく変数の場合、微妙な問題が発生します。ストリームが静的ストリームの場合、日付書式の設定変数よりも寿命が長くなる可能性があるためです。データをコピーせずに追加データに対するポインタや参照を格納する場合、この問題を無視することはできません。

しかし、setfmt マニピュレータのユーザーにとっては、この微妙な問題が必要以上に重荷になることはありません。次のような静的文字シーケンスが与えられた場合、

cout << setfmt("%A, %B %d, %Y") << today;

cout のような静的ストリームの場合でも、setfmt マニピュレータは安全に使用することができます。



前へマニュアルの先頭へ目次次へ

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。


OEM リリース, 1998 年 6 月