我有一个类A,其成员变量类型为M和N.这些对象的生命周期应该受到A的生命周期的限制。
我在考虑
class A {
M member1;
N member2;
}
VS
class A {
std::unique_ptr<M> member1;
std::unique_ptr<N> member2;
}
我不完全确定哪个更好,因为它们都能实现我的目标。成员的生命周期绑定到对象,我不需要手动管理内存。每种设置的优点和缺点是什么?
答案 0 :(得分:4)
使用std :: unique_ptr if
答案 1 :(得分:4)
是的,两者都是正确的,但是......
通常,动态分配对象需要额外的成本,而不是将它们保持为简单的成员。你必须支付从免费商店分配存储器的edtra开销,而不是简单地使用为它们所属的A分配的memroy。无论何时需要访问它们,您都会有间接引用。
如果成本购买了某些东西,仍然可能想要进入智能指针路线。例如:
答案 2 :(得分:2)
取决于类型N
和M
的大小以及您计划如何使用class A
。
N
和M
很小,即一个机器字,那么创建和维护指针的额外开销就是浪费空间和时间。N
和M
非常大并且您打算在堆栈上声明class A
的对象,那么最好使用指针。在这种情况下,类型N
和M
的大对象将在堆区域中分配(并且大多数可能阻止您调试非常讨厌的堆栈溢出问题)。class A
的对象,那么拥有成员变量就足够了,因为在这种情况下,所有内容都将在堆区域中分配,并且您还将保存在开销。希望这很清楚。