C ++自动检测shared_ptr与NULL比较的位置

时间:2013-08-13 17:09:53

标签: c++ boost null shared-ptr

我们有一个庞大的遗留代码库,其中包含常见的指针类型,由于各种原因,它们更适合作为shared_ptrs。

除了NULL检查之外,

shared_ptrs是常规指针的良好替代品。 在整个代码中,我们对这些指针进行定期的NULL检查,在转换为shared_ptrs之后,这些空值检查将始终通过。

有没有人能够自动检测这些情况: if(foo == NULL)//当foo是boost :: shared_ptr时 ?

我们还没有使用C ++ 11,但很快就会出现。

示例:

// declared elsewhere as :   boost::shared_ptr<T> foo;
if (NULL != foo) //always true when shared_ptr.  Correct check when raw pointer
{
      foo->DoSomething();
}

3 个答案:

答案 0 :(得分:3)

你可以将所有指针转换为你的类,它将封装shared_ptr,并重载它的“operator ==”函数来检测NULL比较并计算它们,或者正确处理它们。您可以坚持使用此代理类,也可以在计数之后(例如转储到日志文件中),所有比较都决定是否切换到shared_ptr。

答案 1 :(得分:1)

一位同事提供了这个解决方案,这正是我所追求的: 放入一个公共标题(并以相反的顺序添加参数)

template<typename T>
bool operator!=(int null, const boost::shared_ptr<T>& p)
{   
    typedef typename T::intentional_error error;
    return false;
}

template<typename T>
bool operator==(int null, const boost::shared_ptr<T>& p)
{
    typedef typename T::intentional_error error;
    return false;
}

在shared_ptr和int之间的所有比较位置给出编译时错误。

答案 2 :(得分:-2)

if(foo)应该有效。如果(foo.get())工作