社区
C++ 语言
帖子详情
析构函数可否声明为纯虚函数??
goodboyws
2003-10-20 02:09:01
如题
...全文
1745
19
打赏
收藏
析构函数可否声明为纯虚函数??
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bbcallen
2003-10-23
打赏
举报
回复
参见《Effective C++》 Item 14
"Make sure base classes have virtual destructors"
提到的使用情形是
When "you have a class that you'd like to be abstract,but you don't happen to have any function that are pure virtual."
mfs
2003-10-23
打赏
举报
回复
可以.
ipgk
2003-10-23
打赏
举报
回复
可以!!
析构函数是纯虚函数的亦为抽象类。
如楼上的例子所以错误,因为b继承a后没有改写a的纯虚函数,因此b也是抽象类,自然不能实例化。
修改如下则正确:
class a
{
public:
virtual ~a()=0;
};
class b:public a
{
public:
virtual ~b(){};
};
a::~a(){};//改写a的纯虚函数,此时a仍为抽象类
int main()
{
b bb;
return 1;
}
注意此时a仍为抽象类不能实例化,a aa则错误。
Yssss1980
2003-10-23
打赏
举报
回复
以下是在DEV C++测试结果
class a
{
public:
virtual ~a()=0;
};
class b:public a
{
public:
virtual ~b(){};
};
int main()
{
b bb;
return 1;
}
[Linker error] undefined reference to `a::~a()'
事实证明:不可以
alongfly
2003-10-23
打赏
举报
回复
涉及到派生,如果基类是抽象的类,其构造与析构要定义成虚基类。否则出错。
langzi8818
2003-10-23
打赏
举报
回复
0374--7127923
langzi8818
2003-10-23
打赏
举报
回复
只是它不能实例化了
ttlb
2003-10-23
打赏
举报
回复
同意 fierygnu(va_list)
不行
Jinhao
2003-10-23
打赏
举报
回复
完全可以,正如楼上兄弟所说,做成抽象类,如果不这样就有危险拉
zZing
2003-10-23
打赏
举报
回复
可以阿,就是用来做抽象类的
langzi8818
2003-10-23
打赏
举报
回复
可以啊,这是可以的,不仅可以设成虚函数,而且你可以在外面定义他
BenWong1981126
2003-10-23
打赏
举报
回复
试试看.......结果是可以的,呵呵
yonyon
2003-10-23
打赏
举报
回复
可以,但不常用。
引用一段:
因为很多类并不是被设计作为基类的。只有类在行为上是它的派生类的接口时(这些派生类
往往在堆中分配,通过指针或引用来访问),虚拟函数才有意义。
那么什么时候才应该将析构函数定义为虚拟呢?当类至少拥有一个虚拟函数时。拥有虚拟函
数意味着一个类是派生类的接口,在这种情况下,一个派生类的对象可能通过一个基类指针
来销毁。例如:
class Base {
// ...
virtual ~Base();
};
class Derived : public Base {
// ...
~Derived();
};
void f()
{
Base* p = new Derived;
delete p; // 虚拟析构函数保证~Derived 函数被调用
}
如果基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用——这可能产生糟糕
的结果,例如派生类的资源不会被释放。
Hot_Forever
2003-10-20
打赏
举报
回复
把析构函数声明为纯虚函数意味着这是一个抽象类,专门是用作基类的
fierygnu
2003-10-20
打赏
举报
回复
不行。因为派生类的析构函数会自动调用基类的析构函数,那样连接器会找不到基类的析构函数。
limd
2003-10-20
打赏
举报
回复
好像是不可以的
kissme1943
2003-10-20
打赏
举报
回复
析构函数可以声明成纯虚函数, 但一般不这样做
通常的做法是在想声明成纯虚函数的地方,用空的函数体代替
如 XXX::~XXX() { }
daizh
2003-10-20
打赏
举报
回复
不可以
Hot_Forever
2003-10-20
打赏
举报
回复
可以
C/C++程序员面试指南.杨国祥(带详细书签).pdf
面试题10:编写类String 的
构
造
函数
、
析
构
函数
和赋值
函数
8.4 拷贝
构
造
函数
面试题11:谈谈对拷贝
构
造
函数
和赋值运算符的认识 面试题12:写出当定义#define _INMAIN 0和不定义时代码打印结果 第9章 继承与多态 9.1 ...
C++中的
虚
析
构
函数
、
纯
虚
析
构
函数
具体解释
C++中
析
构
函数
能够为
纯
虚
函数
吗? 众所周知。在实现多态的过程中,一般将基类的
析
构
函数
设为virtual。以便在delete的时候能够多态的链式调用。那么
析
构
函数
能否够设为
纯
虚
呢? class CBase { public: CBase...
MT5智能交易编程实战59课精讲
MT5基本功能介绍、MetaEditor编辑器、基本数据类型、常量和变量、枚举类型、结
构
体、数组、算数运算符、关系运算符、逻辑运算符、条件判断、循环、
函数
、类的定义、类的成员变量和
函数
、类的
构
造
函数
、类的
析
构
函数
...
构
造
函数
和
析
构
函数
能否
声明
为
虚
函数
或者
纯
虚
函数
析
构
函数
可以为
虚
函数
,并且一般情况下基类
析
构
函数
要定义为
虚
函数
。 只有在基类
析
构
函数
定义为
虚
函数
时,调用操作符delete销毁指向对象的基类指针时,才能准确调 用派生类的
析
构
函数
(从该级向上按序调用
虚
函数
),...
C++之
虚
函数
(为什么
构
造
函数
不可以
声明
为
虚
函数
,
析
构
函数
可以
声明
为
虚
函数
)
构
造
函数
不能
声明
为
虚
函数
,而
析
构
函数
可以
声明
为
虚
函数
,在有的情景下
析
构
函数
必须
声明
为
虚
函数
。 不建议在
构
造
函数
和
析
构
函数
里调用
虚
函数
。
构
造
函数
不能
声明
为
虚
函数
的原因?
构
造一个对象时,必须知道...
C++ 语言
64,685
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章