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?"

Original source