我有一个疑问,因为 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/