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()); }
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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With