首页 / C++ / C++ 类的析构函数 (~)
C++ 类的析构函数 (~)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 类的析构函数 (~),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2323字,纯文字阅读大概需要4分钟。
内容图文
![C++ 类的析构函数 (~)](/upload/InfoBanner/zyjiaocheng/689/0c1265e18ce042a9a23fb4e7e1846e13.jpg)
在上一章中, 我们已详细地讲解了类的构造函数, 如果对类还不熟悉的话看这里
在本章中, 类的初步基础已有一些了, 继续深入
在类中, 有了构造函数, 不知有没有想过, 与构造函数相反的功能?
构造函数开辟空间, 赋值变量, 有没有释放空间, 还原变量的呢?----当然有
重点介绍析构函数 (与构造函数相反), 构造函数在变量一创建就调用, 而析构函数在变量被摧毁时调用
什么叫摧毁?
即为变量的作用域已超出, 程序终止时该变量就被摧毁
好了, 那么析构函数如何编写, 只是举一反三罢了
以上一章的 Student 类做例子:
1 #include <string> 2 using std::string; 3 class Student 4 { 5 private: 6 string n; 7 int grade; 8 public: 9 Student(string name,int g): n(name),grade(g) {} 10 ~Student(); 11 };
第10行的即为析构函数
极不推荐的当前的格式 (推荐的请见下文):
~<DataType>(<List>)
<DataType> 为该类的名字
<List> 为参数列表
析构函数就只有一种写法, 这是不同于构造函数既可以写在外面, 又可以写在里面
很简单的例子, 就可以证明该变量的构造与析构函数的调用的时候:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class Student 5 { 6 private: 7 string n; 8 int grade; 9 public: 10 Student() 11 { 12 cout<<"Create!!!\n"; 13 } 14 ~Student() 15 { 16 cout<<"Destroy!!!\n"; 17 } 18 }; 19 int main() 20 { 21 Student s; 22 cout<<"Continue..."<<endl; 23 return 0; 24 }
输出:
Create!!! Continue... Destroy!!!
当然, 析构函数也可以写在类的外部, 与构造函数等相同:
Student::~Student() { //Do something... }
但是, 在复杂的类中,析构函数没有成功调用的话, 可能内存空间没有被释放 (内存泄漏),
也许很多人会疑惑, 这不是变量摧毁是就会调用吗? 怎么会没有调用呢?
这是一个比较复杂的话题, 先提前给出答案: 继承
C++ 中的继承一直是一个很复杂的东西, 请等待有关继承的内容
这种复杂的类的关系, 导致有的时候无法正确调用析构函数
我们只需要将析构函数的格式变更一下即可:
virtual ~<DataType>(<List>)
这是最终的也是最完美的写法, 以后析构函数必须这样写
class Student { private: string n; int grade; public: Student()=default; virtual ~Student(); }; Student::~Student() { cout<<"Destroy!!!\n"; }
等价于:
class Student { private: string n; int grade; public: Student()=default; virtual ~Student()//也可以在类的内部直接实现 { cout<<"Destroy!!!\n"; } };
当然, 跟构造函数相同, 如果什么都不想写, 也可以直接调用系统默认的
1 class Student 2 { 3 private: 4 string n; 5 int grade; 6 public: 7 Student()=default; 8 virtual ~Student()=default; 9 };
就讲到这里了, 请等待更新...
内容总结
以上是互联网集市为您收集整理的C++ 类的析构函数 (~)全部内容,希望文章能够帮你解决C++ 类的析构函数 (~)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。