c++中虚析构函数
来源:互联网 发布:儿童汉语拼音教学软件 编辑:程序博客网 时间:2024/05/16 14:54
下面是在学习虚析构函数的时候看到的一段代码:
class A
{
public :
~A()
{
cout << "A :: ~A() called" <<endl;
}
};
class B :public A
{
public :
B(int i ){ buf = new char[i] ; }
~B()
{
delete []buf ;
cout << "B :: ~B() called "<< endl;
}
private :
char *buf ;
};
void fun( A *a )
{
delete a ;
}
int main(void)
{
A *a = new B(5);
fun(a);
return 0;
}
输出结果:A :: ~A() called
原因:将派生类B的地址赋给基类A定义的指针对象时,C++编译器认为B是A的一个对象,会自动进行类型转换,此时C++编译器认为a保存的就是A的对象的地址,所以只会调用A的成员或成员函数。所以只会调用A的析构函数,故输出结果如上面。但是这样并没有释放buf的内存空间,应在~A()加上virtual关键字,才能保证~B()能够被执行。
- [C/C++]C函数
- c 函数
- C函数
- C 函数
- C函数
- 【C++】函数
- C 函数
- C++:函数
- C函数
- [C++]函数
- C函数
- c 函数
- C函数
- [C++]函数
- C函数
- 【c++】函数
- 【C++】函数
- C 函数
- iText使用教程(5)
- Java语言socket网络编程
- iText使用教程(6)
- Javascript控制DIV上下移动(仿265移动特效)
- 手机视频电话 还离我们多远?
- c++中虚析构函数
- Fedora13下ftp的安装与配置
- alter table move跟shrink space的区别
- 实现图片滑动切换展示效果
- 雇员
- 弹出窗口登录效果
- 配置php的smtp邮件服务器
- fedora开启用户sudo
- 何为"面向切面编程AOP"