社区
C++ 语言
帖子详情
这样的函数是否是虚函数????
hufanxp
2004-12-14 09:34:06
class base{
virtual ~base();//虚函数
}
class Derived : public base
{
~Derived(); // 是否是虚函数?
}
...全文
173
18
打赏
收藏
这样的函数是否是虚函数????
class base{ virtual ~base();//虚函数 } class Derived : public base { ~Derived(); // 是否是虚函数? }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
方健的专栏
2004-12-14
打赏
举报
回复
基类的析构函数声明为虚函数是为了调用其派生类的析构函数,派生类的析构函数不是虚函数
xingxinghao
2004-12-14
打赏
举报
回复
楼上的朋友调试过了 ,结果证明了是。
在调用派生类的析构函数时,是先调用派生类的析构函数,再调用基类的析构函数。
根据楼上朋友写的:int main()
{
derived* p = new C;
delete p;
return 0;
}
VC71下面输出:
C::~C
derived::~derived
base::~base
HP_UNIXxiami下面也是
G++也是,如果把derived的:public base注释掉,则只输出
derived::~derived了
可知,如果不是虚函数的话,他的输出结果是为:derived::~derived
base::~base
一路奔跑
2004-12-14
打赏
举报
回复
是di
dudu妈
2004-12-14
打赏
举报
回复
class base{
virtual ~base();//虚函数
}
class Derived : public base
{
~Derived(); // 不是虚函数,是析构函数
}
不是虚函数,是析构函数
minanqiang
2004-12-14
打赏
举报
回复
声明为virtual的虚函数。
析构函数要是虚函数的话前面也会加上virual
class base{
virtual ~base();//虚函数
}
class Derived : public base
{
~Derived(); // 是否是虚函数? 不是虚函数。
}
Kendiv
2004-12-14
打赏
举报
回复
是虚函数,楼上的朋友已经说得很清楚了。
liem
2004-12-14
打赏
举报
回复
从行为上看是虚函数吧,如:
class base{
public:
virtual ~base(){cout<<"base "<<endl;}
};
class Derived : public base
{
public:
~Derived(){cout<<"derived"<<endl};
};
class Last:public Derived
{
public:
~Last(){cout<<"Last"<<endl;}
};
void f(Derived *p)
{
delete p;
}
void main()
{
Last *d=new Last;
f(d);
}
运行后输出:
Last
Derived
base
======
如果~Derived 不是虚的,那么将不会有"Last"的输出,现有输出,这表明虚函数起作用了。
lattice
2004-12-14
打赏
举报
回复
是的,些个例子测试一下就知道了.
class base
{
public:
virtual ~base(){cout<<"base::~base"<<endl;}
};
class derived//:public base
{
public:
~derived(){cout<<"derived::~derived"<<endl;}
};
class C:public derived
{
public:
~C(){cout<<"C::~C"<<endl;}
};
int main()
{
derived* p = new C;
delete p;
return 0;
}
VC71下面输出:
C::~C
derived::~derived
base::~base
HP_UNIXxiami下面也是
G++也是,如果把derived的:public base注释掉,则只输出
derived::~derived了
goodluckyxl
2004-12-14
打赏
举报
回复
ft
没在意是析构函数
自动继承为虚
不好意思搞错了
hchinside
2004-12-14
打赏
举报
回复
绝对是
lu1172101275
2004-12-14
打赏
举报
回复
that is the way ! 这是继承类的虚析构函数特定写法。
DiabloWalkOnTheEarth
2004-12-14
打赏
举报
回复
是
hufanxp
2004-12-14
打赏
举报
回复
哦,3ks!
goodluckyxl
2004-12-14
打赏
举报
回复
显然没有声明为virtual
要显式声明
langzi8818
2004-12-14
打赏
举报
回复
en
licki
2004-12-14
打赏
举报
回复
不是
snow810211
2004-12-14
打赏
举报
回复
刚看过书,基类声明了就可以了,子类继承过来了,所以不用声明,也是virtual
updd
2004-12-14
打赏
举报
回复
其实是不是都没有影响。
如果是delete指向派生类的指针,那基类析构函数是虚的了,就会按派生类-基类的顺序析构。
如果是其他的,也跟派生类是不是虚构没有关系。
所以就使用上来说,派生类析构申明为虚与否都没有关系,只要把基类析构函数申明为虚就可以了。
不知道我的理解有没有不周到的地方啊
2.1.7 什么
函数
不能声明为
虚
函数
?.md
2.1.7 什么
函数
不能声明为
虚
函数
?
C++中虚析构
函数
的作用
我们知道,用C++开发的时候,用来做基类的类的析构
函数
一般都是
虚
函数
。可是,为什么要这样做呢?下面用一个小例子来说明:
2021-05-16 C#.NET面试题 什么是
虚
函数
?什么是抽象
函数
?
什么是
虚
函数
?什么是抽象
函数
?
虚
函数
:没有实现的,可以由子类继承并重写的
函数
。 抽象
函数
:规定其非虚子类必须实现的
函数
,必须被重写。
C++默认的析构
函数
不是
虚
函数
?析构
函数
必须是
虚
函数
?
虚析构
函数
:基类指针指向子类对象,用基类指针删除子类对象 纯虚析构
函数
:需要类内声明,类外实现,含之抽象类,不可实例化 C++默认的析构
函数
不是
虚
函数
?析构
函数
必须是
虚
函数
? C++默认的析构
函数
不是
虚
函数
目的:节省内存
虚
函数
需要额外的
虚
函数
表和虚表指针,占用额外的内存。对于不会被继承的类来说,将析构设置成
虚
函数
会浪费内存。只有需要当作父类时,设置成
虚
函数
析构
函数
必须是
虚
函数
:防止内存泄漏 当一个类作为父类,需要被继承,才把它的析构
函数
设置为
虚
函数
, 子类有开辟到堆区的属性,父类指针走不到子类的析构
函数
为什么析构
函数
必须是
虚
函数
?为什么默认的析构
函数
不是
虚
函数
?
微信搜索“编程笔记本”,获取更多信息 ------------- codingbook2020 ------------- 今天我们来谈一谈面试 C++ 工程师时经常被谈到的一个问题:为什么析构
函数
必须是
虚
函数
?为什么默认的析构
函数
不是
虚
函数
? 首先,我们看一下百度百科对
虚
函数
是怎么定义的: 在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员
函数
,用法格式为:virtual...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章