Mar*_*rkB 6 c++ destructor stl vector
请考虑以下代码:
class T { ... }; // T has a non-trivial destructor
void foo() {
std::vector<T> v( 5 );
v.pop_back();
...
}
Run Code Online (Sandbox Code Playgroud)
之后v.pop_back()
,STL是否保证T::~T()
已被要求v.back()
?注意:问题保持用于去除元件载体的任何方法(例如resize()
,erase()
等...)
我正在为我的应用程序编写容器类,我希望它们尽可能符合标准库使用的原则.如果我的集装箱舱没有做出这种保证,是否有任何风险?
std::vector::erase
Run Code Online (Sandbox Code Playgroud)
从向量容器中删除并调用元素的析构函数。这同样适用于std::vector::pop_back
.
void pop_back() {
--this->_M_impl._M_finish;
this->_M_impl.destroy(this->_M_impl._M_finish);
}
Run Code Online (Sandbox Code Playgroud)
destroy 是分配器的一种方法:
void destroy(pointer __p) { __p->~_Tp(); }
^^^
dereference and call destructor
on new_allocator::value_type
Run Code Online (Sandbox Code Playgroud)
在我的实现分配器上,vector
模板参数Alloc = std::allocator<_Tp>
初始化了它的基础__glibcxx_base_allocator
whith new_allocator
,因为这个定义:
#define __glibcxx_base_allocator __gnu_cxx::new_allocator
allocator(const allocator& __a) throw()
: __glibcxx_base_allocator<_Tp>(__a) { }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |