如果我这样做:
class A {
B* pointer01 = new B();
C* pointer02 = new C();
}
我必须在析构函数中执行:
delete pointer01;
delete pointer02;
是不是?我找不到任何相关内容。
答案 0 :(得分:3)
如果你真的打算使用指针和动态分配的对象,那么肯定你应该在你的析构函数中delete
(除非你做的事情真的很奇怪你的班级是不是那些对象的所有者。如果是这种情况,请停止它)。您也很可能需要适当的复制和赋值语义,请参阅The Rule of Three。
然而,仅使用自动对象肯定会更容易和更好:
class A {
B b;
C c;
};
答案 1 :(得分:2)
是的,你有 - 基本上每个新的都需要相应的删除。但是你可以使用智能指针(这里是std :: unique_ptr)来简化生活。
答案 2 :(得分:1)
我认为其他答案过分关注应该做什么和良好做法,同时完全跳过真正的答案。
答案是否定的。您无需这样做。我认为标准中没有任何地方可以说明每个delete
都需要new
。 (如果不是这样,那么引用它会很好,这也是一个真正的答案。)
然而,当然资源获取应该与发布配对。这不是很糟糕。 永远一个好主意,但不会使程序非法。
我同意vsoftco的评论,这样的程序在语义上是不正确的,但我仍然认为它会产生合法的c ++代码。 (我不明白标准,我找不到导致内存泄漏或不与new
配对的地方是非法的。)