gpt4 book ai didi

c++ - 我应该创建一个临时对象来实例化 C++ 中的成员变量吗?

转载 作者:行者123 更新时间:2023-11-28 07:16:36 25 4
gpt4 key购买 nike

我有一些像这样的类:

class A():{
public:
A(T t);
};

class B(): {
public:
B(T t);
private:
A* _a;
};

当我只有 t 时,实例化 B 的正确方法是什么?我应该创建一个 A 类型的临时变量,例如:

B::B(T t):
_a( &(A(t)) )
{ ... }

在我看来,这不是一个好主意,尽管我不能确切地指出原因。另一种选择(但不是更好):

B::B(T t):
_a( 0 )
{
_a = &(A(t));
}

最佳答案

永远不要这样做:

&(anything which lives temporarily)

因为它会给你一个悬挂指针。为什么?因为您获取了即将立即删除的内容的地址。

执行以下操作时:

_a(new A(t))

您分配相同的对象但不立即删除它。但是,您需要注意在程序中的某个时刻将其删除。通常在你的类的析构函数中我看不到(但随后注意三的规则或使类不可复制)或使用智能指针来为你删除。

std::unique_ptr 示例:

class B(): {
public:
B(T t) :
_a(new A(t))
{ ... }

private:
std::unique_ptr<A> _a;
};

关于c++ - 我应该创建一个临时对象来实例化 C++ 中的成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132219/

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