c++虚析构函数定义
C++ virtual destructor definitions
我有三个类
class A {
// pure virtual funcs and member vars
virtual ~A();
}
class B : public A {
// some more pure virtual funcs
virtual ~B();
}
class C : public B {
// concrete implementations
~C() {}
}
目前这不会编译与'未定义的引用' typeinfo'错误(~B()没有定义,很容易修复),但我想知道如果只是定义'虚拟的~B{}'是正确的事情要做或是否~C应该是虚拟的和定义的,所以调用~B被分派到~C?
假设这个问题是关于纯虚析构函数的(代码不是真实的,所以很难说,但是你在谈论一个缺失的析构函数定义,以及纯虚函数):
必须定义可调用的纯虚析构函数。
不能在类定义中定义。
没有明确的理由说明为什么必须在类定义之外定义它,除了Bjarne Stroustrup(语言创建者)的一个老注释,他认为= 0
指示了“no body”
的例子。
struct S
{
virtual ~S() = 0;
};
S::~S() {}
相关文章:
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 为什么在定义析构函数时隐式删除移动构造函数
- 仅在删除包含对象的向量时调用自定义»析构函数«
- 这个递归类需要一个自定义析构函数?
- C++ - 定义自定义析构函数时程序崩溃
- 定义析构函数可以防止成员函数内联
- 使用自定义析构函数时出现"Undefined reference"错误
- C++ 在迭代器类中定义析构函数
- `不可复制`与自定义析构函数
- 是否可以使用 std::shared_ptr 创建共享对象池,并在没有自定义析构函数的情况下创建weak_ptr
- 我们什么时候必须在派生类 c++ 中定义析构函数
- 为什么当定义析构函数时,编译器不再添加默认的move函数和赋值函数
- 为标量类型显式定义析构函数
- 提供(空的)用户定义析构函数会导致编译错误
- 为什么带有用户定义析构函数的类的实例将成员指针设置为零
- 如何正确定义析构函数
- 带有Placement New的自定义析构函数
- 什么时候需要定义析构函数?
- 是否可以重新定义析构函数