关于合成析构函数的几个小问

selooloo selooloo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
“不管类是否定义了自己的析构函数,编译器都自动执行类中非static数据成员的析构函数”
“析构函数与复制构造函数或赋值操作符之间的一个重要区别是,即使我们编写了自己的析构函数,合成析构函数仍然运行”
----这是c++primer 4rd的原话

对合成析构函数很不解,问题如下:

1.合成析构函数有必要吗,因为对内置类型的成员,合成析构函数不需要做什么,对类成员,如string成员,没有合成析构函数,超过作用域也会自动调用string析构函数
比如一个函数
void test()
{
string t;
}
test函数结束后,string不也会自动调用析构函数销毁吗,合成析构函数不显得很鸡肋?

2.合成析构函数是什么样的,不会和自己定义的析构函数构成重载吗?规定析构函数是不能重载的啊,或者说合成析构函数不是函数,只是一个运行机制?

3.是不是定义一个类就会合成析构函数,即使是空类

4.合成析构函数会不会被继承?

麻烦高手解答下
...全文

相关推荐

析构函数的作用 什么是析构函数

析构函数的作用是当对象生命期结束后,收回对象占用的资源,析构函数的特点是: 1、析构函数名是在类名前加以符号“~”。 2、析构函数没有参数、返回类型和修饰符。 3、一个类中至多有一个析构函数,如果程序员没有定义析构函数,那么系统会自动地加入一个析构函数。 4、不能显式地调用析构函数,而是由系统自动调用。 定义析构函数格式为: ~类名() {…}        由于c#得到自动内存管理的支持,当对象生命期结束后,系统能够自动回收那些对象应该释放的资源等,所以一般不需要程序员的关心,对于一般的对象,程序中不需要定义析构函数。 阿会楠:《Visual c#.net程序设计教程》笔记

weixin_38703626

C++虚析构函数、纯虚析构函数

分类:   虚析构函数   析构函数的工作方式是:底层的派生类(most derived class)的析构函数先被调用,然后调用每一个基类的析构函数。   因为在C++中,当一个派生类对象通过使用一个基类指针删除,而这个基类有一个非虚的析构函数,则结果是未定义的。运行时比较有代表性的后果是对象的派生部分不会被销毁。然而,基类部分很可能已被销毁,这导致了一个古怪的“部分析构”对象,这是一个泄漏资源。排除这个问题非常简单:给基类一个虚析构函数。于是,删除一个派生类对象的时候有了你所期望的正确行为。将销毁整个对象,包括全部的派生类部分。   但是,一般如果不做基类的类的析构函数一般不声明为

weixin_38548717

详解C++中虚析构函数的作用及其原理分析

主要介绍了C++中虚析构函数的作用及其原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38699757

解析C++中虚析构函数的作用

本篇文章是对C++中虚析构函数的作用进行了详细的分析介绍,需要的朋友参考下

weixin_38674409

C++构造函数和析构函数顺序

构造函数   先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下:   1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。   2.成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。   3.派生类构造函数。   析构函数   析构函数的调用顺序与构造函数的调用顺序正好相反,将上面3个点反过来用可以了,首先调用派生类的析构函数;其次再调用成员类对象的析构函数;后调

weixin_38600696
评论 46
收藏 已收藏
分享
返回顶部
selooloo
C++ 语言 65,214 成员 250,514 内容