检查以下代码:
这个有效:
T *p = (std::find( this->first(), this->last(), *pPos ));
if( p != last() )
{
this->push_back(data);
T *right = (this->last() - 1);
T *left = (this->last() - 2);
while( *pPos != data )
std::iter_swap( left--, right-- );
return const_cast<T*>(pPos);
}
这不是:
boost::scoped_ptr<T> p(std::find( this->first(), this->last(), *pPos ));
if( p.get() != last() )
{
this->push_back(data);
T *right = (this->last() - 1);
T *left = (this->last() - 2);
while( *pPos != data )
std::iter_swap( left--, right-- );
return const_cast<T*>(pPos);
}
第二个版本给出了一个运行时错误
表达式:_BLOCK_TYPE_IS_VALID_(pHead->nBlockUse)
这意味着我的 scoped_ptr 过早地超出了范围,或者正在做一些使它无效的时髦事情。
我对 scoped_ptr 做错了什么?
附录:
我无法删除任何指针。这是正常的吗?即使我删除了右/左,我也会得到同样的错误,即使它们在返回时不再被引用。
最佳答案
boost::scoped_ptr 将在指针(即 boost::scoped_ptr 实例)超出范围时删除指针。我不认为你想删除指针,它在你的类中似乎是一个迭代器。
关于c++ - Boost::Scoped_Ptr 破坏代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3909309/