3

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

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

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

3 回答 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; // never throws
返回一个未指定的值,当在布尔上下文中使用时,它等价于 get() != 0。

于 2013-01-17T04:50:42.380 回答
5

应该足够了:

if( cFoo )
{ ... }

scoped_ptr有一个到bool的安全隐式转换,当它不为空时将评估为。true

于 2013-01-17T04:47:28.420 回答
0

当“ new CFoo”失败时,它会抛出异常,所以我认为你不需要检查 cFoo 是否为空。如果你new(std::nothrow)if (cFoo)是需要的。

于 2018-04-19T07:42:11.660 回答