我是自动指针的新手。我有这个:
std::auto_ptr<myClass> myPointer(new MyClass(someArg));
如何测试是否可以成功实例化myPointer
?我试过if (myPointer==NULL)
并且编译器发出错误:
没有运算符“==”匹配这些操作数。
答案 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
正是您所寻找的。 p>
答案 3 :(得分:1)
鉴于您在问题中写的语句,myPointer已设置或抛出异常,捕获异常是检查是否出错的正确方法。
在任何情况下,您都可以通过调用auto_ptr::get()
来获取基础指针。
答案 4 :(得分:0)
检查std::auto_ptr
NULL
时,我认为这是最常用的符号:
if (!myPointer.get()) {
// do not dereference here
}