c++ - 无法在析构函数上使用 virtual 关键字

标签 c++

是否有任何有效且可用的情况会强制您不要在析构函数之前使用 virtual 关键字。

class Base {
public:
  virtual ~Base() { ... } // `virtual` causes error (not compile time or syntax) or wrong behaviour
  // could contain other fields

};

// some example 

最佳答案

使析构函数虚拟可能会将您的从非多态类型转换为多态类型。

请注意,多态类型永远无法简单地复制。因此,例如,您可以通过引入虚拟析构函数来中断对 std::memcpy 的任何使用。

在某些情况下——尤其是在与 C 互操作时——这可能会造成严重破坏,因为你不能再假设你的 class 实例的地址与第一个成员的地址相同.

引用:https://en.cppreference.com/w/cpp/types/is_trivially_copyable

关于c++ - 无法在析构函数上使用 virtual 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543335/

相关文章:

c++ - 在 c++ 中使用 operator 关键字在这里意味着什么?

c++ - 以下十进制到二进制转换代码是如何工作的?

c++ - 有关涉及字符串类的核心转储问题的帮助

c++ - 带有静态 std::vector 的内存泄漏(有点)

c++ - 无法使用 ifstream::open 打开 html 资源文件 - Visual Studio 2013

c++ - 如何自动清理 C++ 中的代码?

C++ 窗口时间

c++ - std::auto_ptr 错误

c++ - 需要什么软件才能开始在 Windows 中开发无需 cygwin 或 .Net 等其他工具即可运行的 c/c++?

c++ - 保证大型 std::vector 的移动