Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

When I was working on a project that involved defining sentences in a given language, I was surprised to discover that std::string destructor was not virtual. This made it a lot more difficult to specialize this class (I had to create a wrapper). Why did the standard committee decide to have this class not virtual?

in /usr/lib64/gcc/x86_64-pc-linux-gnu/4.5.3/include/g++-v4/bits/basic_string.h, we have:

template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string
{
   ...

  /**
   *  @brief  Destroy the string instance.
   */
  ~basic_string()
  { _M_rep()->_M_dispose(this->get_allocator()); }
like image 435
qdii Avatar asked Nov 22 '25 10:11

qdii


2 Answers

It is by design. I think the designer is hinting that the class should not be sub-classed.

Also look at this: Why should one not derive from c++ std string class?

like image 80
Sid Avatar answered Nov 24 '25 02:11

Sid


It's not meant to be derived from. None of the standard classes are.

The approved way to enhance them is by encapsulation, not inheritance.

like image 23
Mark Ransom Avatar answered Nov 24 '25 01:11

Mark Ransom