我可以使用在初始化列表中初始化的C++类成员,稍后在列表中吗?

Ken*_*rom 6 c++ instantiation class-constructors podofo

我正在重写一些代码以消除全局变量并使类构造函数/析构函数句柄清理某些第三方库资源,但我担心一些代码会从类初始化列表中的另一个成员初始化一个成员.

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;
};
Run Code Online (Sandbox Code Playgroud)

使用这个类的代码不需要查看使用该库的所有细节,但是我隐藏它们的方式使它依赖于使用成员初始化其他成员,然后才能访问构造函数的实际代码块,在那里它有一个有效的this指针.

它适用于单元测试骨架,所以我的问题基本上是,"这样可以,便携且安全吗?"

Bo *_*son 8

成员按照声明的顺序从上到下进行初始化

PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
Run Code Online (Sandbox Code Playgroud)

所以用它device来初始化是安全的document.