标题:
C++各种构造函数的写法(3)
[打印本页]
作者:
yuyang911220
时间:
2017-4-21 20:59
标题:
C++各种构造函数的写法(3)
五、关于虚析构
虚析构一般伴随着多态而产生,多态主要方式就是用基类的指针或引用指向或引用派生类,而形成多态。
但是这样就会存在一个问题,当我们析构的时候,由于是基类的指针,就会调用的是基类的构造函数,从而造成派生内存溢出。为了解决这个问题,引入了虚析构的概念。将基类的构造函数声明为虚,从而使其在调用析构函数的时候能够准确的调用派生类的析构函数。
如下代码必须用到虚析构才能准确的析构派生类,并释放其占有内存。
1
class
Base
2
{
3
public
:
4
Base(
int
b) : m_b(b)
5
{
6
}
7
//
虚析构,使基类指针能准确的释放所指向的派生类里面的内容
8
virtual
~
Base()
9
{
10
}
11
private
:
12
int
m_b;
13
};
14
15
class
Derived :
public
Base
16
{
17
public
:
18
Derived(
int
b,
char
*
pStr) : Base(b)
19
{
20
m_pStr =
new
char
[strlen(pStr)+
1
];
21
strcpy(m_pStr,pStr);
22
}
23
~
Derived()
24
{
25
delete m_pStr;
26
m_pStr =
NULL;
27
}
28
private
:
29
char
*
m_pStr;
30
};
31
32
int
main(
void
)
33
{
34
char
*pStr =
"
abcdefg
"
;
35
Base *b =
new
Derived(
1
,pStr);
36
delete b;
37
38
return
0
;
39
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0