考虑以下代码示例:
class Base {
public:
Base( string& _object ) : object( _object ) {}
private:
string& object;
};
class Derived: public Base {
public:
Derived() : Base( object ) {}
private:
string object;
};
Run Code Online (Sandbox Code Playgroud)
显然首先Base构造并传递对尚未构造的对象的引用.
内存是为整个Derived对象分配的,因此Derived::object在合法可访问的内存中,只是它的构造函数没有运行.Base::Base()不调用任何传递对象的方法,只存储引用.它适用于Visual C++ 9.
根据C++标准,它是否安全?
给出以下类ConcreteBar实现BarIfc:
class Base {
public:
Base(BarIfc& bar) : _bar(bar) { }
void foo() {
_bar.bar();
}
private:
Base(const Base& other);
Base& operator=(const Base& other);
BarIfc& _bar; // Pure virtual interface
};
class Child : public Base {
public:
// bar is passed to base class before initialization
Child(int i) : Base(_bar), _bar(i) {
}
private:
Child(const Child& other);
Child& operator=(const Child& other);
ConcreteBar _bar;
};
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设这一点
Child(int i) : Base(_bar), _bar(i) {}
Run Code Online (Sandbox Code Playgroud)
只要我不在_bar基类的初始化列表中使用(例如调用方法)引用,它就是"有效"的C++ ?