1. 首页 > 生活百科 > c++析构函数什么时候调用(了解C++析构函数:何时调用)

c++析构函数什么时候调用(了解C++析构函数:何时调用)

了解C++析构函数:何时调用

在面向对象的编程中,需要关注对象的创建和销毁。C++中,创建对象已经被广泛讨论,但是析构函数对于一个对象的生命周期同样重要。本文将深入探讨C++中的析构函数以及何时调用。

什么是析构函数

在C++中,每个类都可以定义只能由系统自动调用的析构函数。可以通过定义析构函数来实现对象在销毁时所需要完成的一些动作,例如释放动态分配的内存等。

一个析构函数的命名规则如下:
~class_name () {
//动作
}

例如,以下是一个构造函数和析构函数的例子:

```cpp #include using namespace std; class Example { public: Example(){ cout << \"Constructor called.\" << endl; } ~Example(){ cout << \"Destructor called.\" << endl; } }; int main() { Example obj; return 0; } ``` 输出结果为 ``` Constructor called. Destructor called. ``` 可以看到,析构函数在对象销毁时自动调用。

何时调用析构函数

在C++中,析构函数的调用有以下三种情况:

1. 正常作用域结束

当一个对象在其作用域结束时(比如函数结束),析构函数会被自动调用。以下是一个例子:

```cpp #include using namespace std; class Example { public: Example(){ cout << \"Constructor called.\" << endl; } ~Example(){ cout << \"Destructor called.\" << endl; } }; void func(){ Example obj; } int main() { cout << \"Before func().\" << endl; func(); cout << \"After func().\" << endl; return 0; } ``` 输出结果为: ``` Before func(). Constructor called. Destructor called. After func(). ``` 可以看到,当func()函数结束时,Example对象的析构函数被调用。

2. 对象被销毁

当对象被销毁时,析构函数会被自动调用。以下是一个例子:

```cpp #include using namespace std; class Example { public: Example(){ cout << \"Constructor called.\" << endl; } ~Example(){ cout << \"Destructor called.\" << endl; } }; int main() { Example *ptr = new Example(); delete ptr; return 0; } ``` 输出结果为: ``` Constructor called. Destructor called. ``` 可以看到,当Example对象被delete时,析构函数被调用。

3. 异常抛出

当异常在对象的构造函数中抛出时,对象的析构函数会被自动调用来销毁对象。

例如:

```cpp #include using namespace std; class Example { public: Example(){ cout << \"Constructor called.\" << endl; throw \"Exception thrown in constructor.\"; } ~Example(){ cout << \"Destructor called.\" << endl; } }; int main() { try { Example obj; } catch(...) { cout << \"Exception caught.\" << endl; } return 0; } ``` 输出结果为: ``` Constructor called. Destructor called. Exception caught. ``` 可以看到,当Example对象的构造函数抛出异常时,析构函数被调用来销毁对象。

总结

在C++中,析构函数在对象销毁时自动调用。一个类的析构函数定义和命名规则是固定的,可以通过定义析构函数来实现对象在销毁时所需要完成的动作。以上通过实际例子详细说明了何时会调用析构函数,让读者更好地了解C++中的析构函数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至3237157959@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:10:00-18:30,节假日休息