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

时间:2011-08-15 20:03:19

标签: c++ auto-ptr

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

std::auto_ptr<myClass> myPointer(new MyClass(someArg));

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

  

没有运算符“==”匹配这些操作数。

5 个答案:

答案 0 :(得分:22)

“实例化”是什么意思?

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

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


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

要执行此操作,请使用X* std::auto_ptr<X>::get() const throw(),如下所示:

if (myPointer.get()) {
   // ...
}

另请注意std::auto_ptr is deprecated in C++0x, in favour of std::unique_ptr。更喜欢后者,您可以访问符合要求的实现。

答案 1 :(得分:5)

这个怎么样?

 if(myPointer.get()==NULL)

答案 2 :(得分:3)

我认为myPointer.get() == NULL正是您所寻找的。

答案 3 :(得分:1)

鉴于您在问题中写的语句,myPointer已设置或抛出异常,捕获异常是检查是否出错的正确方法。

在任何情况下,您都可以通过调用auto_ptr::get()来获取基础指针。

答案 4 :(得分:0)

检查std::auto_ptr NULL时,我认为这是最常用的符号:

if (!myPointer.get()) {
    // do not dereference here
}