为什么必须实现虚析构函数 ,纯虚析构函数的原因

本文的主要参考书籍是  C++ Primer

struct A { 
	virtual ~A() = 0;
	 }; 
	struct B : A {
	 virual ~B() {} 
}; 
	int main( void ) {
 	B x; 
} 


编译的时候肯定报A::~A未实现,这是因为普通virtual只调用动态类型的那个函数实现,所以基类的可以不实现;而virtual析构函数则不同,它需要由下往上层层调用,所以每一层都需要实现。 另外,有没有实现代码 跟 是否为纯虚 是没有关系的,只要把 A 改为: struct A { virtual ~A() = 0 {} };

看看下面的解释:

A destructor can be declared virtual(10.3) or pure virtual(10.4);if any object of that class or any derived class are created in the program, the destructor shall be defined. If a class has a base class with a virtual destructor, its destructor (whether user-or implicitly-declared) is virtual. 

struct A 
{ 
virtual ~A() = 0 {} 
}; 
应当写成 
struct A 
{ 
virtual ~A() = 0; 
}; 
A::~A() 
{ 
} 
 

因为C++规定 =0 和 {} 不能同时出现。

[Note: a function declaration cannot provide both a pure-specifier and a definition 
—end note] 
[Example: 
struct C { 
virtual void f() = 0 { }; // ill-formed 
}; 
—end example]  

必须实现虚析构函数 ,纯虚析构函数的原因 大致如上!


你可能感兴趣的:(为什么必须实现虚析构函数 ,纯虚析构函数的原因)