c++ 基类析构函数必须得实现吗?

这是基类的析构函数:virtual~CElement(){}为什么得这样写,virtual~CElement();不行吗?另外,虚拟析构函数起作用只是在、作为指针的时候吗... 这是基类的析构函数:

virtual ~CElement() {}
为什么得这样写, virtual ~CElement();不行吗?

另外, 虚拟析构函数起作用只是在、作为指针的时候吗?不用指针的时候是不是就不需要了?
展开
 我来答
fcgzlevege
2013-05-11
知道答主
回答量:3
采纳率:0%
帮助的人:4万
展开全部
  • 必要性上看,理论上来说,虚构函数不是必须写明的,特别是在使用可视化编译器的时候更是如此,因为如果没有写明析构函数,编译器会在编译的时候自动生成一个简单的析构函数。

  • 但是要明确析构函数非常总要,特别是在涉及到继承和派生的时候,如果没有明确给出析构函数,往往会造成编译器不报错,程序可以执行,但是容易出现内存错误的问题。

  • 在涉及的指针操作的时候,如果不写明析构函数,同样也会由于编译自动生成的析构函数过于简单,从而容易造成在动态分配内存的释放上出现意想不到的内存错误。

  • 后面两种情况下的错误,编译器是不会检查的,就像编译器永远不会检查内存溢出错误一样,一旦错误发生,不容易找出问题。如果是大型程序,修正这类错误非常困难。因而从安全和稳定性而言,析构函数可以说是必须的,可以保证程序在程序员的设计下工作,而不会出现无法预料的错误。

帐号已注销
2013-05-11 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1238万
展开全部
必须实现。 基类的析构函数是必须调用的,尽管这个基类是抽象类!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小小乐师
2013-05-11 · TA获得超过124个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:150万
展开全部
1,你不带函数体,编译器最好也会要它带上。

2,如果不用指针,那么这个就不算是基类了。如果是基类,那么虚析构函数的作用就是为了正确调用到派生类的析构函数,以防止
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巴扎嘿v5
2013-05-11 · TA获得超过308个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:165万
展开全部
如果你申明了一个类成员函数的话,你就必须去实现它,当然编译的时候不会错误,但是链接的时候就会找不到这个函数。
例如

class A
{
};

int main(int argc, char *argv[])
{
A a;
return 0;
}

A类中什么函数都没有,但是照样可以执行。是因为编译器在背后偷偷地替你实现了。

但是如果是

class A
{
public:
void show();
};

int main(int argc, char *argv[])
{
A a;
a.show();
return 0;
}

那就完蛋了,show()函数找不到了。链接出错。

虚函数也是一样的,

你在某个地方调用虚函数,完蛋了,链接出错,你没有实现,上哪里去找这个函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式