相关疑难解决方法(0)

709
推荐指数
11
解决办法
17万
查看次数

508
推荐指数
8
解决办法
5万
查看次数

42
推荐指数
3
解决办法
1万
查看次数

gcc4.9.2的std :: vector的libstdc ++实现继承自_Vector_base(非虚拟目标).为什么这样好?

所以我一直在使用从std :: vector派生的容器.也许这是一个糟糕的设计决定,原因有几个,而且你是否应该做这样的事情的问题在这里有广泛的讨论:

你不能继承std :: vector

子类/继承标准容器?

从C++ STL容器中获取是否存在任何真正的风险?

是否可以从STL容器继承实现,而不是委托?

我确信我已经错过了一些讨论......但是在链接中找到了两个观点的合理论据.据我所知,"因为~vector()是非虚拟的"是你不应该从stl容器继承的"规则"的基础.但是,如果我在g ++ 4.9.2中查看std :: vector的实现,我发现std :: vector继承自_Vector_base,而_Vector_base是非虚拟析构函数.

template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
{
...
  ~vector() _GLIBCXX_NOEXCEPT
  { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
    _M_get_Tp_allocator()); }

...
}
Run Code Online (Sandbox Code Playgroud)

哪里:

template<typename _Tp, typename _Alloc>
struct _Vector_base
{
...
  ~_Vector_base() _GLIBCXX_NOEXCEPT
  { _M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage
    - this->_M_impl._M_start); }

...
}
Run Code Online (Sandbox Code Playgroud)

所以std :: vector的gcc 4.9.2实现继承自带有非虚析构函数的基类.这让我相信这是一种可接受的做法.为什么这样好?这种做法没有危险的具体条件是什么?

c++ inheritance vector libstdc++

17
推荐指数
1
解决办法
1039
查看次数