我确定这在某个地方得到了回答,但我缺乏制定搜索的词汇。
#include <iostream>
class Thing
{
public:
int value;
Thing();
virtual ~Thing() { std::cout << "Destroyed a thing with value " << value << std::endl; }
};
Thing::Thing(int newval)
{
value = newval;
}
int main()
{
Thing *myThing1 = new Thing(5);
std::cout << "Value 1: " << myThing1->value << std::endl;
Thing myThing2 = Thing(6);
std::cout << "Value 2: " << myThing2.value << std::endl;
return 0;
}
输出表明 myThing2 已被销毁,而我的 myThing1 没有。
所以...我需要以某种方式手动解构它吗?这是内存泄漏吗?在这种情况下我应该避免使用 * 吗?如果是,什么时候合适?
最佳答案
黄金法则是,无论您在哪里使用new
,都必须使用delete
。您正在为 myThing1
创建动态内存,但您从未释放它,因此永远不会调用 myThing1
的析构函数。
这与 myThing2
的区别在于 myThing2
是一个作用域对象。操作:
Thing myThing2 = Thing(6);
与以下内容完全不同:
Thing *myThing1 = new Thing(5);
阅读更多关于动态分配的信息 here .但作为最后的建议,您应该谨慎使用 new
关键字,请在此处阅读更多相关信息:
关于c++ - 解构 *Thing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931800/