我确信这在某个地方得到了解答,但我缺乏制定搜索的词汇.
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出表明myThing2被破坏了,我的myThing1没有.
所以...我需要以某种方式手动解构它吗?这是内存泄漏吗?我应该避免在这种情况下使用*,如果是这样,何时适合?
黄金法则是,无论你在哪里使用,new你都必须使用delete.您正在为其创建动态内存myThing1,但您永远不会释放它,因此myThing1永远不会调用析构函数.
这与之间的区别在于myThing2它myThing2是一个范围对象.操作:
Thing myThing2 = Thing(6);
Run Code Online (Sandbox Code Playgroud)
完全不相似:
Thing *myThing1 = new Thing(5);
Run Code Online (Sandbox Code Playgroud)
了解更多关于动态分配在这里.但作为一些最终建议,你应该new谨慎使用关键字,在这里阅读更多相关信息:
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |