为什么 std::string 没有虚拟析构函数

Why doesn’t std::string have a virtual destructor?

本文关键字:虚拟 析构函数 string std 为什么      更新时间:2023-10-16

当我在一个涉及用给定语言定义句子的项目时,我惊讶地发现std::string析构函数不是虚拟的。这使得专门化这个类变得更加困难(我必须创建一个包装器(。为什么标准委员会决定让这门课不是虚拟的?

在/usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.3/include/g++-v4/bits/basic_string.h 中,我们有:

template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string
{
   ...
  /**
   *  @brief  Destroy the string instance.
   */
  ~basic_string()
  { _M_rep()->_M_dispose(this->get_allocator()); }

这是设计使然。我认为设计师是在暗示该类不应该被子类化。

还要看看这个:为什么不应该从 c++ std 字符串类派生?

它不是要派生自的。没有一个标准类是。

增强它们的认可方法是封装,而不是继承。