我正在重写一些代码以消除全局变量并使类构造函数/析构函数句柄清理某些第三方库资源,但我担心一些代码会从类初始化列表中的另一个成员初始化一个成员.
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指针.
它适用于单元测试骨架,所以我的问题基本上是,“这样可以,便携且安全吗?”
解决方法
成员按照声明的顺序从上到下进行初始化
PoDoFo::PdfOutputDevice device; PoDoFo::PdfStreamedDocument document; PoDoFo::PdfPainter painter;
所以使用device初始化文件是安全的.