Рассмотрим этот пример кода:
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 С++ 9.
Безопасно ли это в соответствии со стандартом С++?