c++ - protected 与私有(private)的析构函数

标签 c++

C++ 中 protected 析构函数和私有(private)析构函数有什么区别吗?如果基类析构函数是私有(private)的,我想在删除派生类对象时仍然会调用它。

最佳答案

如果基类析构函数是privateprotected,那么你不能通过基类指针调用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/

相关文章:

在内存中修改自身的 C++ 对象

C++ 如何替换代码中不寻常的引号

c++ - Microsoft Visual Studio Enterprise 2015 Start Without Debugging 窗口为空白

c++ - 在 Eigen 中复制模板化函数参数

指针的c++ vector 以不同方式推回

c++ - 将像素缓冲区类型从 1555 转换为 5551(C++、OpenGL ES)

c++ - 类模板中定义的友元函数定义的范围是什么/在哪里?

c++ - 在 C++ STL 映射上用迭代器删除

c++ - 将 emplace_back 与 unique_ptrs 容器一起使用是否安全?

c++ - 在 Windows C++ 中将字符串的区域设置感知解析为日期