【发布时间】:2025-12-25 20:45:17
【问题描述】:
如标题所述,这是我的代码:
class Foo {
public:
Foo (int charSize) {
str = new char[charSize];
}
~Foo () {
delete[] str;
}
private:
char * str;
};
对于这个类有什么区别:
int main () {
Foo* foo = new Foo(10);
delete foo;
return 0;
}
和
int main () {
Foo* foo = new Foo(10);
foo->~Foo();
return 0;
}
【问题讨论】:
-
你永远不应该有理由显式调用析构函数,除非在少数情况下你知道你需要这样做。
-
@chris 如解决缺少展示位置删除的问题:*.com/questions/6783993/placement-new-and-delete
-
@ScottJones,没错。
-
我也遇到过类似的情况。我有两个指针,ptr1 和 ptr2,指向堆上的同一个内存位置。我使用 ptr1 显式调用析构函数,但随后我可以使用 ptr2 访问该位置。但是当我在 ptr1 上使用 delete 时,我无法再使用 ptr2 访问我的对象。
标签: c++ memory-management destructor