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

标签 c++ pointers boost

检查以下代码:

这个有效:

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/

相关文章:

c++ - `myvector.push_back(autoPtr.release())`为什么提供强异常安全保障?

c++ - Main 函数与状态之间的通信

java - Java中如何获取一个新的指针?

C 指针数组未按预期打印,它用最后一个输入替换所有内容

c++ - 您可以更改 bsoncxx 对象(文档/值/元素)吗?

c++ - 打开输出流时出错

c++ - nullptr 和指针算法

c++ - 嵌套的 boost::assign:list_of 在 Visual Studio 2012 中损坏 - 对重载函数的调用不明确

c++ - 一旦 C++0x 成为主流,boost 的重叠部分会发生什么?

c++ - 如何累积持续时间