C++ boost::scoped_ptr的空检查
我是boost框架的新手,我不确定如何检查scoped_ptr中的对象是否为nullC++ 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<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异常的异常
:)