默认关键字虚拟析构函数
default keyword virtual destructor
我一直在使用越来越多的C++11,我遇到了一些我在任何地方都找不到的东西。当我们从基指针中删除派生类时,我们需要有虚拟析构函数; 但有时父析构函数需要"纯",这在C++中是不可能的。那么,我的问题是默认值可以用于虚拟析构函数吗?我已经尝试过了,它可以工作,但我不知道它是否安全,因为互联网上的任何地方都没有关于它的信息。
编辑:为了澄清问题,我说的是使用virtual ~Class() = default;
是虚拟的吗 ~Base() = 默认值;合法的
是的,是的。
如果要使用纯虚拟析构函数,可以执行以下操作:
class Base
{
public;
virtual ~Base() = 0;
};
并提供实施:
Base::~Base() = default; // or any other implementation
所以Base
是虚拟的纯粹。可以使用 C++11 之前(按 {}
更改= default;
)来完成。
在这种情况下,只使用 virtual ~Class() {}
更简单。它具有相同的含义,它更短,并且您无需弄乱实现。 = default
主要用于复制/移动构造函数/赋值运算符,而不是析构函数。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- "虚拟""覆盖"析构函数
- 程序永远不会进入虚拟析构函数
- C++ std::vector 中的虚拟析构函数继承
- 哪种方法更适合处理虚拟析构函数?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 带有未解析外部元素的C++虚拟析构函数
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 从内部类的析构函数调用虚拟函数
- C++切片和虚拟析构函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 添加虚拟析构函数会使代码大小膨胀
- 应该是虚拟析构函数吗?但是怎么做呢?
- 虚拟析构函数将对象移出 rodata 部分
- 为什么虚拟类的析构函数不会自动添加到 vtable 中?
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- DIRECTX9 中自定义顶点的虚拟析构函数
- 声明析构函数虚拟就足够了吗?