【发布时间】:2017-03-18 18:17:58
【问题描述】:
我是 C++ 新手,我试图用不同的方式释放对象。这是我的代码:
class foo{
public:
int* bar;
foo(int N){
bar = new int[N];
}
~foo(void){
delete[] bar;
}
};
int main(int argc, char* argv[]){
foo* F = new foo(10);
delete F;
return 0;
}
这很好用,但是如果我这样写 main:
int main(int argc, char* argv[]){
foo F = foo(10);
F.~foo();
return 0;
}
我最终会得到“检测到 glibc”。我想我应该以某种方式释放“bar”指针,因为它是在构造过程中分配的。
因此我的问题是如何释放这样的对象?谢谢。
【问题讨论】:
-
这就是美丽。具有自动存储持续时间的对象的析构函数在超出范围时被调用。
-
chris 表示你不必调用 F.~foo(),它会被自动调用。
-
顺便说一句,第二行应该是“foo F(10);”。
-
将语句:
bar = NULL;(或nullptr)附加到析构函数,并考虑当F超出范围时会发生什么......' -
感谢大家非常有帮助的回复,现在很清楚了。
标签: c++ object memory-management delete-operator