gpt4 book ai didi

c++ - Boost::Scoped_Ptr 破坏代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:10:18 24 4
gpt4 key购买 nike

检查以下代码:

这个有效:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com