我有用戶定義的類是這樣的:std :: list remove_if刪除節點?
class Test {
public:
bool opeatator== (const Test& rhs) const {
return this->value_ == rhs.value_;
}
int value_;
};
我保存這個終場前的std ::名單如下:
std::list<Test*> tests_;
tests_.push_back(new Test());
然後我試圖剛剛從列表中刪除節點是這樣的:
Test remove_key(1);
tests_.remove_if([remove_key](const Test* p) { return remove_key == *p; });
它刪除value_爲1的所有節點,但是remove_if call :: operator delete()會刪除列表中的對象。 據我所知,remove_if只是從列表中刪除,但它不會刪除對象,但是當我調試它時,列表調用析構函數的Test類,並刪除對象::operator delete(_Ptr)
。 我錯了什麼?
(以下代碼是STL列表的remove_if調用堆棧(反向順序)在Visual Studio 2013年)
列表
remove_if(_Pr1 _Pred) {
for (iterator _First = begin(); _First != end();)
if (_Pred(*_First))
_First = erase(_First);
else
++First;
}
iterator erase(const_iterator _Where) {
_Nodeptr _Pnode = _Unlinknode(_Where++);
this->_Freenode(_Pnode);
return (_Makie_iter(_Where));
}
void _Freenode(_Nodeptr _Pnode) {
this->_Getal().deallocate(_Pnode, 1);
}
void deallocate(pointer _Ptr, size_type _Count) {
_Mybase::deallocate(_Ptr, _Count);
}
void deallocate(pointer _Ptr, size_type) {
::operator delete(_Ptr);
}
您認爲節點從列表中移除後,它在哪裏?它不會刪除指針所指向的'Test'對象,如果這就是你所要求的。 – 2015-04-06 10:50:32