请问该如何理解析构函数可以是虚函数,构造函数则不可以?

matt1014 2007-05-12 02:55:03
能举个例子给我说一下吗?
...全文
392 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanbenben 2007-05-17
  • 打赏
  • 举报
回复
如果一个类的构造函数为虚,则派生类产生对象时没法调用基类的构造函数,产生不了对象
qhgary 2007-05-17
  • 打赏
  • 举报
回复
如果一个类有被另外的类继承,那么就给这个类的析构函数加上virtual.记住就可以了,主要是为了防止子类析构产生的问题.
winner8080 2007-05-17
  • 打赏
  • 举报
回复
虚拟调用是一种能够在给定信息不完全的情况下工作的机制。特别地,虚拟允许我们调用某个函数,对于这个函数,仅仅知道它的接口,而不知道具体的对象类型。但是要建立一个对象,你必须拥有完全的信息。特别地,你需要知道要建立的对象的具体类型。因此,对构造函数的调用不可能是虚拟的。
jigangwang 2007-05-17
  • 打赏
  • 举报
回复
class Base
{
public:
//virtual Base(){};
virtual ~Base(){cout<<"In Base virtual Desucture"<<endl;};//In Base Desucture In Derived Desucture
//~Base(){cout<<"In Base Desucture"<<endl;};//In Base Desucture
};

class Derived:public Base
{
public:
Derived(){};
~Derived(){cout<<"In Derived Desucture"<<endl;}
};
int main(int arc,char * argv[])
{
Base * d = new Derived();
delete d;
d = NULL;
system("PAUSE");
return 0;
}
gooderfeng 2007-05-13
  • 打赏
  • 举报
回复
构造函数是构造自己的,如果是虚拟的也没有意义的。
析构函数是为了让子类在析构的时候来调用。
matt1014 2007-05-12
  • 打赏
  • 举报
回复
谢谢:)
eggqq007 2007-05-12
  • 打赏
  • 举报
回复
其中有一句话:当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。
eggqq007 2007-05-12
  • 打赏
  • 举报
回复
详情请参见《Effective C++》的条款14
matt1014 2007-05-12
  • 打赏
  • 举报
回复
在什么情况下析构函数要用虚函数?
eggqq007 2007-05-12
  • 打赏
  • 举报
回复
详见请看:
http://www.maocom.com/resources/program/html/2006726/5112.htm
  • 打赏
  • 举报
回复
因为构造的时候虚表还没构造好呢。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧