当前位置:首页 C++ > 正文

c++析构函数什么时候调用

作者:野牛程序员:2023-08-07 08:34:55 C++阅读 2737

C++析构函数是一种特殊的成员函数,用于在对象生命周期结束时执行清理操作。它的主要作用是释放对象所占用的资源,比如动态分配的内存、打开的文件等。析构函数的命名规则是在类名前面加上波浪号~

析构函数在以下情况下被自动调用:

  1. 对象的作用域结束:当对象的作用域(即其所在的代码块)结束时,析构函数会被调用。例如,在一个函数内部创建的对象,当函数执行完毕时,对象的作用域结束,析构函数会被调用。

class MyClass {
public:
    MyClass() {
        std::cout << "Constructor called." << std::endl;
    }
    ~MyClass() {
        std::cout << "Destructor called." << std::endl;
    }
};

void someFunction() {
    MyClass obj; // 创建对象
} // 对象的作用域结束,析构函数被调用

输出结果:

Constructor called.
Destructor called.
  1. 对象被显式删除:使用delete关键字显式删除使用new运算符创建的对象时,析构函数会被调用。

int main() {
    MyClass* objPtr = new MyClass(); // 创建对象指针
    delete objPtr; // 显式删除对象
    return 0;
} // 对象的作用域结束,析构函数被调用

输出结果:

Constructor called.
Destructor called.
  1. 容器对象元素被删除:当对象被存储在容器中(如数组、vector、map等),而容器本身的生命周期结束时,其中的对象也会调用析构函数。

#include <vector>

int main() {
    std::vector<MyClass> objVector;
    objVector.push_back(MyClass()); // 向vector中添加对象
    return 0; // vector的作用域结束,其中的对象的析构函数被调用
}

输出结果:

Constructor called.
Destructor called.

总结:析构函数在对象生命周期结束时被自动调用,包括对象的作用域结束、对象被显式删除以及存储在容器对象中的对象在容器生命周期结束时。析构函数的主要作用是释放资源和执行清理操作,确保对象的资源被正确释放,避免资源泄漏。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击