如何测试自动指针是否为空?

use*_*069 8 c++ auto-ptr

我是自动指针的新手.我有这个:

std::auto_ptr<myClass> myPointer(new MyClass(someArg));
Run Code Online (Sandbox Code Playgroud)

如何测试是否可以myPointer成功实例化?我试过if (myPointer==NULL),编译器发出错误:

没有运算符"=="匹配这些操作数.

Lig*_*ica 22

"实例化"是什么意思?

在符合标准的实现上,要么构造MyClass成功,要么抛出异常,并且auto_ptr将不再在范围内.因此,在您提供的示例中,您所代表的指针的值auto_ptr 不能NULL.

(您可能正在使用无异常支持的实现NULL,即使不使用说明(nothrow)符,也可以返回分配失败(而不是抛出异常),但这不是一般情况.)


一般来说,您可以检查指针的值.您只需要了解基础表示,因为正如您所发现的那样,std::auto_ptr没有operator==.

为此,请使用X* std::auto_ptr<X>::get() const throw(),如下所示:

if (myPointer.get()) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

另请注意,std::auto_ptr在C++ 0x中不赞成使用std::unique_ptr.更喜欢后者,您可以访问符合要求的实现.

  • OP可能在不使用异常的上下文中工作(因此`new`可以返回NULL).这比人们喜欢承认的要普遍得多. (2认同)

Tae*_*hin 5

这个怎么样?

 if(myPointer.get()==NULL)
Run Code Online (Sandbox Code Playgroud)