Почему std :: string не имеет виртуального деструктора? - PullRequest
2 голосов
/ 04 февраля 2012

Когда я работал над проектом, включающим определение предложений на заданном языке, я с удивлением обнаружил, что деструктор 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 ]

9 голосов
/ 04 февраля 2012

Это по замыслу. Я думаю, что дизайнер намекает, что класс не должен быть подклассом.

Также посмотрите на это: Почему бы не наследовать от класса строк c ++ std?

3 голосов
/ 04 февраля 2012

Это не должно быть производным от.Ни один из стандартных классов не является.

Одобренный способ улучшить их - это инкапсуляция, а не наследование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...