这些天我一直在深入研究C ++入门第5版。我发现在页面452-453上,它表示shared_ptr
会自动销毁其对象并释放相关的内存。
我不太明白。那么破坏对象和释放相关内存之间的区别是什么?
答案 0 :(得分:3)
当您动态创建对象时,首先为它分配内存(这只是一些字节)。然后运行构造函数以在这些字节中构造对象实例 - 初始化成员,获取资源等。
完成对象后,您必须反向执行此操作。首先运行析构函数,释放对象拥有的任何资源。现在再次留下一些用于包含对象的字节。然后你需要释放字节并使系统能够重复使用它们。
答案 1 :(得分:3)
考虑这个类的一个对象:
class foo {
double* a;
foo() { a = new double();}
~foo() {delete a;}
}
如果要在使用此类对象后进行清理,则仅释放该对象的内存是不够的,但必须调用destrcutor以便正确删除a
。
答案 2 :(得分:2)
销毁对象和释放内存是非常密切相关的行为,类似于获取内存和构造对象。
让我们说你有一些文件,你可以借鉴一些不错的反恐表达方式。然后你决定绘制其他东西:使用橡胶清除你画的东西,但纸张仍在那里!
对象和内存也是如此:对象存在于内存中,因此您必须在构造它们之前获取它,并且在纸上构建图形。当你不再需要绘图时,你要清理纸张(破坏物体);这并不意味着你不能在旧的,仍然被收购的纸张上进行新的绘制。如果您真的完成了它,那么您将销毁该对象并释放它的内存,这就是以前的驻留位置。这也意味着你需要再次获取内存以便"绘制"试。
答案 3 :(得分:1)
销毁对象是关于释放对象最终在其生命周期内获取的资源以及对象存储器本身。
具体地说,这意味着当引用计数为0时,共享指针将调用删除函数。默认情况下,它是delete
方法,但您也可以提供自定义删除器。
答案 4 :(得分:1)
这可能是一种非正式术语,在创建和删除对象时会对某些操作进行区分。
创建(可以使用new
)分配内存,然后初始化/ 构建对象。
删除(可以使用delete
)销毁 /取消初始化对象,然后取消分配关联的内存。
作者肯定使用destroy来表示调用析构函数。
答案 5 :(得分:-1)
我想"摧毁"一个对象可能只是删除指向它的指针,而#34;释放相关的内存"字面意思是释放内存上的锁。至少那是我认为作者试图得到的东西。