社区
C++ 语言
帖子详情
析构函数可否声明为纯虚函数??
goodboyws
2003-10-20 02:09:01
如题
...全文
1847
19
打赏
收藏
析构函数可否声明为纯虚函数??
如题
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++ interview question 2
C++ Interview Questions – Subscribe to FREE & Exclusive career resources at www.JobsAssist.com/CareerMag/
C++_作业_3_答案1
1. 虚函数、
纯虚函数
可以定义为 static 成员函数吗 2. 构造函数、
析构函数
可以定义为虚函数和
纯虚函数
吗 3. 分析下面的程序,指出错误之处(解释错误原
经典C与C++面试题精选
经典C与 C++ 面试题总结,面试集锦,技巧
掌讯互动面试题_嵌入式-常用知识&面试题库_大厂面试真题.doc
掌讯互动面试题_嵌入式-常用知识&面试题库_大厂面试真题.doc
面试题目cocos2dx和c++
c++面试题,给面试者一个学习的机会,我们公司就是用这个面试题招人的,加油,小伙伴们!
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章