Рассмотрим этот пример кода:
class Base {
public:
Base( string& _object ) : object( _object ) {}
private:
string& object;
};
class Derived: public Base {
public:
Derived() : Base( object ) {}
private:
string object;
};
Очевидно, сначала создается Base
, и ему передается ссылка на еще не построенный объект.
Память выделяется для всего объекта Derived
, поэтому Derived :: object
находится в легально доступной памяти, только его конструктор не запущен. Base :: Base ()
не вызывает никаких методов переданного объекта, только сохраняет ссылку. Работает в Visual C ++ 9.
Безопасно ли это согласно стандарту C ++?