c++ - 编译器是否在由 new 初始化的对象上调用隐式析构函数

标签 c++ destructor

我有一个疑问,因为 C++ (GNU g++) 编译器使用堆栈中的对象调用隐式 d-tor。当它为一个对象调用 d-tor 时,其中的内存是用 new 分配的。

struct abc{
   int a;
};

int main(){
 {
     abc ob1;
 }//! Here implicit ~abc() will be called

 {
 abc *ob2 = new abc();
 } //! Will comipler call d-tor for ob2 ?

 return 0;
}

请帮助我知道,如果编译器没有释放 *ob2 的内存,那么为什么它会这样做?

最佳答案

没有。您需要对该对象调用 delete

如果您在 C++(一种非托管语言)中动态创建对象,则必须对该对象调用 delete 以释放堆上的内存。

在指向对象的指针上调用delete 将调用要删除的对象的析构函数。

关于c++ - 编译器是否在由 new 初始化的对象上调用隐式析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50618299/

相关文章:

c++ - 空析构函数做什么?

每次使用 List 的方法后调用 C++ List 析构函数

C++ 模板实例化点困惑

c++ - Boost Multi-Index 的上限

c++ - 谁能帮我让 glutBitmapString 工作?

c++ - gcc 在这里做什么来让每个线程运行一次这段代码?

c++ - cout/cerr wrapper ostream 以最小的努力

c++ - 返回时复制操作是在 lock_guard 析构函数之前还是之后执行的?

node.js - 当我的对象即将被 Node 中的 GC 收集时,我可以得到回调吗?

c++ - 在销毁时执行自动内存覆盖的模板