Следующий код из here:Base-из-членами Idiom в C++
#include <streambuf> // for std::streambuf
#include <ostream> // for std::ostream
class fdoutbuf
: public std::streambuf
{
public:
explicit fdoutbuf(int fd);
//...
};
class fdostream
: public std::ostream
{
protected:
fdoutbuf buf;
public:
explicit fdostream(int fd)
: buf(fd), std::ostream(&buf) // This is not allowed.
// buf can't be initialized before std::ostream.
{}
//...
};
Я не очень понимаю, комментарий. Почему «buf не может быть инициализирован до std :: ostream»? Могу ли я использовать некоторую помощь, чтобы понять это?
Фактически этот код полностью в порядке, если конструктор базового класса (в этом случае 'std :: ostream (std :: streambuf * buf_ptr)' не получает доступ к объекту buf (aka '* buf_ptr)'. ' & buf' правильно указывает на адрес памяти, где 'buf' будет построен позже, так как указатель' this' уже действителен в списке инициаторов-членов. – smerlin