【发布时间】:2018-02-06 23:11:13
【问题描述】:
在C++中,我们可以通过对象来管理资源,即在Ctor中获取资源,在Dtor中释放(RAII)。这依赖于 C++ 的自动析构函数调用。但这是如何在幕后完成的呢?例如,C++ 如何知道为c1 而不是c2 调用Dtor。 (我知道这之前一定已经回答过了,但我所有的搜索都以解释如何使用 RAII 的主题结束)。谢谢!
class Cat;
Cat c1;
Cat* c2 = new Cat();
编辑:
我知道我需要为c2 调用删除。我只是不明白当c1 超出范围时如何调用 Dtor。
【问题讨论】:
-
GCC 是免费软件,Clang 是开源的。去看看吧。
-
它已经完成,因为 C++ 标准说它必须完成。它是通过让你的 C++ 编译器生成符合 C++ 标准的编译代码来完成的。
-
编译器将其添加到程序集中。
-
c2也调用了析构函数,只是不是Cat析构函数而是Cat*析构函数,这是微不足道的。 -
@rozina Calling ~int()