2012-07-27 70 views
0
class A 
{ 
public: 
    A(...) {...} 
    virtual ~A() {...} 

private: 
    // may contains data 
}; 

class B : public A 
{ 
public: 
    B(...) {...} 
private: 
    // contains no data 
}; 

class C : public B 
{ 
public: 
    C(...) {...} 
    ~C() {...} 
private: 
    // may contains data 
}; 

正如你所看到的,class A是基类,所以我们必须提供一个实现的虚析构函数。我们应该为中间继承类提供默认实现:

问题>我们是否必须为具体的class B提供默认析构函数? class B本身不需要实现自定义的析构函数来释放任何已分配的资源。

谢谢

+0

号<多余的字符,使极限> – 2012-07-27 14:42:53

回答

2

号一旦一个碱基的析构函数是虚拟的,所有派生析构函数自动虚拟的。如果默认实现足够,则不需要提供用户定义的析构函数。

(事实上,如果默认执行在基地连足够,还应当声明并把它定义为virtual ~A() = default;,而不是一个空的身体。)

+0

好! C++ 11语法! – q0987 2012-07-27 14:47:02

1

不,如果您没有资源可以发布,则不需要那样做。

这同样适用于任何其它方法,包括virtualpure virtual