Когда я работал над проектом, который включал определение предложений на заданном языке, я с удивлением обнаружил, что деструктор std::string
не был виртуальным. Это затруднило специализацию этого класса (мне пришлось создать обертку). Почему стандартный комитет решил, что этот класс не виртуальный?Почему 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()); }
Возможно, это похоже на Java: разработчикам не хотелось, чтобы программист расширил класс String, поскольку другие программисты ожидают, что String будет работать со стандартной реализацией, а не с каким-то определенным пользователем (и злонамеренным?) Поведением. –