前言:我希望能够存储来自派生(具体)类类型的对象的(抽象)基类引用,以便以后可以将其返回并转换为相同的派生(具体)类,而无需求助于指针并不断拥有担心所有权、内存泄漏和悬空指针/错误引用。
使用下面的层次结构,尝试的构造函数调用:A(/* Other variables */, Bar(/* Bar variables */));
失败并显示 `Warning 3 warning C4239: nonstandard extension used : 'argument' : conversion from 'Bar' to 'Foo&' (Visual Studio 2010 SP1)
将 更改class O
为包含 aFoo* _foo
和构造函数初始化会/*...*/, _foo(&foo)
导致悬空指针,因为在构造函数完成时临时对象被销毁。
有没有办法将一个临时对象传递给一个需要引用的类并且不会让代码变得疯狂?
`
/* ABSTRACT BASE CLASS */
class Foo {
//...
};
/* DERIVED, CONCRETE CLASS */
class Bar : public Foo {
//...
};
class O {
O(/* Other variables */, Foo& foo) : /* Other member variable initializations */, _foo(foo) { }
//...Other member variables here...
Foo& _foo;
friend class A;
};
class A {
public:
A(/* Other individual variables used to fully construct object 'O' */, Foo& foo) : /*...*/, _foo(foo) { }
private:
O _o
};