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

时间:2012-02-03 21:08:09

标签: c++ string virtual std

当我参与一个涉及用给定语言定义句子的项目时,我惊讶地发现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()); }

2 个答案:

答案 0 :(得分:9)

这是设计的。我认为设计师暗示这个班级不应该被分类。

另请注意:Why should one not derive from c++ std string class?

答案 1 :(得分:3)

这并不意味着从中衍生出来。没有标准类。

经过批准的增强方法是封装,而不是继承。