use*_*740 6 c++ class smart-pointers member
我有一个类A,其成员变量类型为M和N.这些对象的生命周期应该受到A的生命周期的限制.
我在考虑
class A {
M member1;
N member2;
}
Run Code Online (Sandbox Code Playgroud)
与
class A {
std::unique_ptr<M> member1;
std::unique_ptr<N> member2;
}
Run Code Online (Sandbox Code Playgroud)
我不完全确定哪个更好,因为它们都能实现我想要的.成员的生命周期绑定到对象,我不需要手动管理内存.每个设置有哪些优缺点?
这取决于类型的大小N以及M您计划使用的方式class A。
N和M都很小,即一个机器字,那么创建和维护指针的额外开销就是浪费空间和时间。N和类型M非常大,并且您打算class A在堆栈上声明一个对象,那么最好使用指针。在这种情况下,类型N和的大对象M将被分配在堆区域中(并且很可能阻止您调试非常讨厌的堆栈溢出问题)。class A,那么拥有成员变量就足够了,因为在这种情况下,所有内容都将在堆区域中分配,并且您还将节省开销。希望这一点是清楚的。