结论
以下:
在栈上的对象,作用域结束后自动调用析构函数(自动的),而delete用于在堆上创建的空间,执行delete后,程序会执行该对象的析构函数,而不执行delete程序不会自动执行析构函数(也就是说,不使用delete它就不析构)。
示例
class Factory
{
public:
Factory(int n)
{
num = n;
std::cout << "工厂 " << num << " 号启动了!" << std::endl;
}
~Factory()
{
std::cout << "工厂 " << num << " 号关停了!" << std::endl;
}
private:
int num = 0;
};
调用delete
int main() {
Factory one(1);
Factory *two = new Factory(2);
delete two;
two = nullptr;
std::cout << "Hello World!" << std::endl;
system("pause");
return 0;
}
来看看执行结果:
不调用delete
不调用delete当然有内存泄漏了(这里仅做实验示例)。
int main() {
Factory one(1);
Factory *two = new Factory(2);
std::cout << "Hello World!" << std::endl;
system("pause");
return 0;
}
来看看结果(第二个对象没有析构):