Проверьте следующий код:
Это работает:
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);
}
Вторая версия выдает ошибку времени выполнения
Expression: _BLOCK_TYPE_IS_VALID_(pHead->nBlockUse)
означает, что мой scoped_ptr слишком рано вышел из области видимости или делает какие-то прикольные вещи, которые делают его недействительным.
Что я делаю не так с scoped_ptr?
Приложение:
Я не могу удалить ни один из указателей.Это нормально?Даже если я удаляю вправо / влево, я получаю ту же ошибку, даже если на нее больше не ссылаются.