c++ - 虚析构函数的内容一定要为空吗?
PHPz
PHPz 2017-04-17 13:08:43
[C++讨论组]

c++primer:

一个基类总是需要析构函数,而且它能将析构函数设定为虚函数。此时,该析构函数为了成为虚函数而令内容为空。

也就是说虚析构函数一定是这样的形式喽?

virtual ~Deconst()=default;

难道就不能有{ }包围的函数体吗?

PHPz
PHPz

学习是最好的投资!

全部回复(3)
PHP中文网

楼上的说的比较清楚了,default会让编译器给你加上一个{}。
如果你的这个类持有了一些资源,虚析构函数也不应当为空,
需要做一些清理工作。例如:

class A{
public:
    virtual ~A(){
        free(handle);
        delete ptr;
    }
    
    someFilehandle* handle;
    somePointer* ptr;   
};

如果A是作为一个父类,那么它的析构函数尽量声明为virtual以避免
以下的情况出现:

class B : public A {
public:
    //some declaration
    virtual ~B() {}
};

//假使你获得了或者创建了一个A*类型的指向一个B*对象
{
    A* a = new B();
    delete a;//如果A的构造函数不是virtual,那么这个时候
             //就是一个未定义行为,B的析构函数多半不会调用
             //导致可能的资源/内存泄漏。
}
ringa_lee

不能,你这里显式定义了用默认析构函数作为你的析构函数,如果要自定义就不是default了

大家讲道理

=default不是为空, 而是使用默认行为, 还是调用会成员的析构函数, 这一点跟直接写{}没什么本质区别.

virtual ~Deconst()=default;
virtual ~Deconst() {}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号