gpt4 book ai didi

c++ - 解构 *Thing

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:53 28 4
gpt4 key购买 nike

我确定这在某个地方得到了回答,但我缺乏制定搜索的词汇。

#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 关键字,请在此处阅读更多相关信息:

Why should C++ programmers minimize use of 'new'?

关于c++ - 解构 *Thing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931800/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com