私はいくつかのコードを書き直してグローバル変数を排除し、クラス コンストラクター/デストラクターがサード パーティ ライブラリ リソースのクリーンアップを処理するようにしましたが、クラス初期化子リスト内の別のメンバーから 1 つのメンバーを初期化するコードについて懸念しています。
class MyPodofoDocument {
public:
// generates pdf to stream
MyPodofoDocument(std::stringstream *pStringStream)
: device(pStringStream), document(&device)
{
}
private:
PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
};
このクラスを使用するコードは、ライブラリの使用に関するすべての詳細を表示する必要はありませんが、それらを非表示にする方法により、コンストラクターの実際のコード ブロックに到達する前に、メンバーを使用して他のメンバーを初期化することに依存します。有効な this ポインターがあります。
単体テストのスケルトンで動作するので、私の質問は基本的に「これは大丈夫ですか、移植可能で安全ですか?」です。