我发现几乎每个虚拟析构函数的代码片段都将它作为公共成员函数,如下所示:
class Base
{
public:
virtual ~Base()
{
cout << "~Base()" << endl;
}
};
class Derived : public Base
{
public:
~Derived()
{
cout << "~Derived()" << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
虚拟析构函数必须是公共的还是存在非公共虚拟析构函数有意义的情况?
Alo*_*ave 19
虚拟析构函数必须是公共的还是存在非公共虚拟析构函数有意义的情况?
马匹课程.public如果需要多态删除,则使用虚拟析构函数,否则您的析构函数根本不需要是虚拟的.
遵循赫伯的建议:
准则#4:基类析构函数应该是公共的和虚拟的,或者是受保护的和非虚拟的.
简而言之,那么你将离开两种情况中的一种.或者:
- 您希望通过基指针允许多态删除,在这种情况下,析构函数必须是虚拟和公共的; 要么
- 你没有,在这种情况下,析构函数应该是非虚拟的并受到保护,后者可以防止不必要的使用.
正如非虚析构函数,没有他们需要不是public,但他们大多的时间.
如果您的类是规则的一个例外,并且需要以任何理由控制其实例的生命周期,那么析构函数必须是非的public.这将影响客户如何(或不能)利用该类的实例,但这当然是重点.而且由于析构函数是virtual唯一的另一种选择virtual protected.
| 归档时间: |
|
| 查看次数: |
8916 次 |
| 最近记录: |