boost::scoped_ptr的NULL检查

3

我是boost框架的新手,不确定如何检查scoped_ptr中的对象是否为空。

boost::scoped_ptr<CFoo> cFoo(new CFoo);

if(NULL != cFoo)
{
    //todo
}

2
当你活到九百岁时,看起来不错,嗯?(c)尤达 - user405725
3个回答

10

你可以做

if(cFoo.get() != 0 ) //what you are trying to do
或者只是
if(cFoo) // as K-Ballo explains.

boost::scoped_ptr所述:

转换操作

operator unspecified-bool-type () const; // 不会抛出异常
返回一个未指定的值,当在布尔上下文中使用时,相当于 get() != 0。


5

应该做以下工作:

if( cFoo )
{ ... }
scoped_ptr具有一种安全的隐式转换成bool的方式,当其不为null时,将会评估为true

2
此外,在发布的代码片段中,cFoo 永远不会为 null,因为如果分配失败,new 将抛出异常。 - Praetorian
@Praetorian:除非您使用“-fno-exceptions”禁用异常 :) - user405725

0
当"new CFoo"失败时,它会抛出异常,因此我认为你不需要检查cFoo是否为空。如果你使用new(std::nothrow),则需要使用if (cFoo)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接