C++虚析构函数
2013-10-21 16:20
232 查看
在C++中,构造函数不能被声明为虚函数,但是析构函数可以被声明为虚函数。只要基类的析构函数被声明为虚函数了,则它的派生类的析构函数,无论是否使用virtual,都将自动被说明为虚函数。
当使用delete运算符和析构函数一起使用时,delete一个对象,则delete隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析构函数将不会被自动调用。
1 基类的析构函数被声明为虚函数,则它的派生类的析构函数,无论是否使用virtual,都将自动被说明为虚函数。
2,一般在定义类时,建议都将析构函数声明为虚函数。要镇用。
3.delease隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析函数将不会被自动调用。
#include <iostream>
class Base
{
private:
int a;
public:
Base(int _a)
{
a = _a;
}
virtual ~Base()
{
a = 0;
}
};
class Derive :
public Base
{
private:
char *str;
public:
Derive(int _a,
const char *_s):Base(_a)
{
str = new
char[strlen(_s) +
1];
strcpy(str, _s);
}
~Derive()
{
delete str;
}
};
int main(int argc,
const char * argv[])
{
// insert code here...
Base *p = new
Derive(10,
"string");
delete p;
return 0;
}
当使用delete运算符和析构函数一起使用时,delete一个对象,则delete隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析构函数将不会被自动调用。
1 基类的析构函数被声明为虚函数,则它的派生类的析构函数,无论是否使用virtual,都将自动被说明为虚函数。
2,一般在定义类时,建议都将析构函数声明为虚函数。要镇用。
3.delease隐含对析构函数的调用,如果析构函数不是虚函数,则子类的对象的析函数将不会被自动调用。
#include <iostream>
class Base
{
private:
int a;
public:
Base(int _a)
{
a = _a;
}
virtual ~Base()
{
a = 0;
}
};
class Derive :
public Base
{
private:
char *str;
public:
Derive(int _a,
const char *_s):Base(_a)
{
str = new
char[strlen(_s) +
1];
strcpy(str, _s);
}
~Derive()
{
delete str;
}
};
int main(int argc,
const char * argv[])
{
// insert code here...
Base *p = new
Derive(10,
"string");
delete p;
return 0;
}
相关文章推荐
- C++求最小公倍数
- My_itoa在C++中的我的itoa(数值转标准字符串)函数
- C++输入一组数据,降序排列后,删除三个连续元素的中间值
- C++类中的static数据成员,static成员函数
- C++编程新思维中的技巧
- C++使用纯虚函数完成正方形和圆形的求面积运算。
- 大话设计模式--解释器模式 interpreter -- C++实现实例
- 大话设计模式--解释器模式 interpreter -- C++实现实例
- C++求最大公约数
- mutable of C++
- C/C++数组指针与指针数组详解
- C/C++数组指针与指针数组详解
- C++求斐波那契数
- 动态分配二维数组 c++
- 常量指针补充
- c c++ 混合编译
- 2013C++第9周项目——多分支结构程序设计
- C++纯虚函数与抽象类
- c语言 常用知识点
- 集合:求A、B两个集合的交集、并集和补集的代码(C语言)