对象与对象指针

时间:2011-11-03 12:48:56

标签: c++ object pointers

以下代码段的模拟代码

    class A
    {
    };

我有上面的类,现在我为它创建了一个对象指针,并为它创建了一个对象。

    A* a;
    A aobj;

我想使用aobj(A的对象)在下面的if语句中使用模拟代码。

    if(a)
    {
    }

4 个答案:

答案 0 :(得分:3)

我在堆上分配的aobj因此无法删除(解构)。只要它在范围内,它就可以使用。一旦超出范围就会被自动覆盖,因此没有必要使用if(aobj)它将存在于范围内。

int fun() {
  A aobj;  // this object cannot be deleted because there is no new operator
          // and it will live until the function will return(or die)
  if(aobj) { // there is no point to test it because will always be true(except OS crash)
  }
 return 0;
}

如果你需要在范围之外的对象,你必须用new创建它们并在删除它们时指定null(c ++ 11),这样你就会知道它的空指针何时不再存在一个对象。

答案 1 :(得分:2)

if(true)
{
}

甚至更简单:

;
                    

关闭并非larsmansjweyrichSam MillerSoner Gönüliammilind 19分钟之前的真实回答,因为他们可以。

                    

很难说这里说的是什么。这个答案含糊不清,含糊不清,不完整,不能以现有形式合理地进行投票。请参阅FAQ

答案 2 :(得分:1)

没有这样的东西,因为 aobj 永远是一个对象。它总是“存在”。指针 a 可以是NULL,但不能是 aobj 对象。

答案 3 :(得分:1)

据推测,A有一个初始化其成员的构造函数。你可以添加一个

bool IsValid()  

仅检查成员是否为默认值的成员。例如

class A {
    int value;
    A() : value(-1) { }
    bool IsValid() { return value!=-1; }
}

if (aobj.IsValid()) {
    ...
}