我有一个类A,其中包含类型为M和N的成员变量。这些对象的生命周期应该受到A生命周期的限制。
我在考虑
class A {
M member1;
N member2;
}
对比。
class A {
std::unique_ptr<M> member1;
std::unique_ptr<N> member2;
}
我不确定哪种更好,因为它们都能实现我想要的功能。成员的生命周期绑定到对象上,我不需要手动管理内存。每种设置的优缺点是什么?
我有一个类A,其中包含类型为M和N的成员变量。这些对象的生命周期应该受到A生命周期的限制。
我在考虑
class A {
M member1;
N member2;
}
对比。
class A {
std::unique_ptr<M> member1;
std::unique_ptr<N> member2;
}
我不确定哪种更好,因为它们都能实现我想要的功能。成员的生命周期绑定到对象上,我不需要手动管理内存。每种设置的优缺点是什么?
如果满足以下条件,请使用std::unique_ptr:
没错,两种方法都是正确的,但是...
一般来说,与保持对象为简单成员相比,动态分配对象会有额外的成本。您必须支付从自由存储分配它们的内存的额外开销,而不是仅使用A所分配的内存。每当需要访问它们时,您也将拥有间接引用。
如果这样做有所收益,您仍然可能希望选择智能指针路线。例如:
M
和N
创建为指针的情况是它们非常大,而在堆栈上创建它们可能会导致堆栈空间不足。 - Steve Lorimer