Can I use C++ class members initialized in the initializer list, later in the list?
c++, class-constructors, instantiation, podofo
Solution
The members are initialized in the order they are declared, top to bottom
PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
so it is safe to use `device` to initialize `document`.
Problem
I am rewriting some code to eliminate global variables and made a class constructor/destructor handle cleanup of some third party library resources, but I am concerned about some code which initializes one member from another member in the class initializer list. ``` 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; }; ``` The code which uses this class doesn't need to see all the details that go into using the library, but the way I hide them makes it dependent on using members to initialize other members, before it hits the constructor's actual code block, where it has a valid this pointer. It works in a unit test skeleton, so my question is basically, "Is this okay, portable and safe?"