use*_*729 5 c++ constructor reference pass-by-reference
我想知道这些是否基本相同.
class ExampleClass {
public:
ExampleClass(Object& newObj) : obj(newObj) {}
private:
Object obj;
}
class ExampleClass2 {
public:
ExampleClass2(Object& newObj) : objReference(newObj) {}
private:
Object& objReference;
}
Run Code Online (Sandbox Code Playgroud)
所以这不适用于任何一个类吗?
ExampleClass* getExampleObject() {
Object obj;
return new ExampleClass(obj);
}
ExampleClass2* getExample2Object() {
Object obj;
return new ExampleClass2(obj);
}
void main() {
ExampleClass* ec = getExampleObject();
ExampleClass2* ec2 = getExample2Object();
//Do something involving the member objects of ec and ec2
}
Run Code Online (Sandbox Code Playgroud)
那么在两个getExampleObject方法之后,成员对象是否无效?ExampleClass的构造函数不保存其构造函数中引用的对象的副本吗?
ExampleClass 很好,因为它需要在其构造函数参数中引用的对象的副本.
ExampleClass2要求在其构造函数参数中引用的对象在ExampleClass2实例的生命周期中存在(因为它存储对对象的引用,它不会复制它).如果没有,那么ExampleClass2只要它引用的对象被破坏,实例就会有一个悬空引用.这是返回时被破坏的getExample2Object()函数的情况.objgetExample2Object()