C++ 中 protected 析构函数和私有(private)析构函数有什么区别吗?如果基类析构函数是私有(private)的,我想在删除派生类对象时仍然会调用它。
最佳答案
如果基类析构函数是private
或protected
,那么你不能通过基类指针调用delete
。
使用 protected 析构函数来防止通过基类指针破坏派生对象。它将析构函数的访问限制为派生类。它可以防止自动 (堆栈)类基的对象。
In effect it is used to allow any other polymorphic use of derived classes via pointers to base, but not allow the users to delete using such a pointer. Example:- Abstract Base Classes / Interfaces.
但是 protected
, non-virtual
析构函数在 non-final
类上似乎是一个等待发生的错误。假设您不提供 destroy()
函数,您最终必须公开 dtor。一旦您这样做,您就无法进一步控制该类,并且如果有人从您的类进一步派生,您将面临使用非虚拟 dtor 进行多态删除的风险。
关于c++ - protected 与私有(private)的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3246761/