gpt4 book ai didi

c++ - 传递对 C++ 构造函数的引用并将它们保存为引用或非引用类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:25 28 4
gpt4 key购买 nike

我想知道这些是否基本相同。

class ExampleClass {
public:
ExampleClass(Object& newObj) : obj(newObj) {}
private:
Object obj;
}

class ExampleClass2 {
public:
ExampleClass2(Object& newObj) : objReference(newObj) {}
private:
Object& objReference;
}

那么这对任何一个类都不起作用吗?

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
}

那么两个getExampleObject方法后成员对象是不是都失效了呢? ExampleClass 的构造函数不保存其构造函数中引用的对象的拷贝吗?

最佳答案

ExampleClass 很好,因为它需要在其构造函数参数中引用的对象的拷贝。

ExampleClass2 要求在其构造函数参数中引用的对象在 ExampleClass2 实例的生命周期内存在(因为它存储对该对象的引用,它不会复制它).如果没有,那么 ExampleClass2 实例将在其引用的对象被销毁后立即拥有悬空引用。 getExample2Object() 函数就是这种情况,因为 objgetExample2Object() 返回时被破坏。

关于c++ - 传递对 C++ 构造函数的引用并将它们保存为引用或非引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117347/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com