C++ boost::scoped_ptr的空检查

C++ boost::scoped_ptr的空检查,c++,boost,C++,Boost,我是boost框架的新手,我不确定如何检查scoped_ptr中的对象是否为null boost::scoped_ptr<CFoo> cFoo(new CFoo); if(NULL != cFoo) { //todo } boost::范围受限的ptr cFoo(新的cFoo); if(NULL!=cFoo) { //待办事项 } 它应该足够做: if( cFoo ) { ... } scoped_ptr具有到bool的安全隐式转换,当其不为null时,将计算为true

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

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

if(NULL != cFoo)
{
    //todo
}
boost::范围受限的ptr cFoo(新的cFoo);
if(NULL!=cFoo)
{
//待办事项
}

它应该足够做:

if( cFoo )
{ ... }
scoped_ptr
具有到bool的安全隐式转换,当其不为null时,将计算为
true

您可以这样做

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

if(cFoo) // as K-Ballo explains.
正如在

转换

运算符未指定布尔类型()常量;//从不抛出

返回一个未指定的值,当在布尔上下文中使用时,相当于get()!=0.

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

当你达到九百岁时,看起来还不错,你不会吧,嗯?(c) YodaFurthermore,
cFoo
在发布的代码段中永远不会为空,因为如果分配失败,
new
将抛出。@Praetorian:除非禁用带有
-fno异常的异常
:)