【问题标题】:object vs object pointer [closed]对象与对象指针[关闭]
【发布时间】:2011-12-21 03:53:01
【问题描述】:

以下代码 sn-p 的模拟代码可能是什么

    class A
    {
    };

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

    A* a;
    A aobj;

我想要下面使用 aobj(A's object) 的 if 语句的模拟代码。

    if(a)
    {
    }

【问题讨论】:

  • 我完全不知道你在问什么......
  • 你想做什么?你是想通过'a'指针使用'aobj',还是什么?你能解释一下你到底想做什么吗?
  • 我想放置对象而不是指针。我知道这行不通,有什么办法吗?
  • 你为什么认为aobj也能做到同样的事情?如果没有指针也能做同样的事情,那么指针就没有多大意义了。
  • 我支持 tenfour,但您可能会关注 operator bool。检查safe bool idiom,但真正的问题是:你想达到什么目的?

标签: c++ object pointers


【解决方案1】:
if(true)
{
}

甚至更简单:

;

关闭 19 分钟前larsmansjweyrichSam MillerSoner Gönüliammilind 不是真正的答案,因为他们可以。

很难说出这里在说什么。这个答案是模棱两可的,模糊的,不完整的,不能以目前的形式合理地否决。见FAQ

【讨论】:

  • 我看到你在那里做了什么:)。
【解决方案2】:

aobj i 分配在堆上,因此无法删除(销毁)。只要它在范围内,它就可以使用。一旦超出范围就会自动覆盖,因此没有必要使用 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),这样您就可以通过它的空指针知道对象何时不再存在。

【讨论】:

    【解决方案3】:

    大概 A 有一个构造函数来初始化它的成员。你可以添加一个

    bool IsValid()  
    

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

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

    【讨论】:

    • 或者同时提供bool operator bool() constbool operator!() const
    • 正如其他人指出的那样,这里并不清楚你想要什么 - 我只是猜测你可能会得到什么......
    • 验证指针是检查空值的问题。为什么我们要承受这么多痛苦。我从来没有写过这样的一行代码
    • @jweyrich:提供operator bool() 通常不是一个好主意,因为这会使类可以转换为任何数字类型,这会导致歧义和混乱。在 C++11 中,提供explicit operator bool();在 C++03 中,使用 "safe bool" idiom
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2023-02-09
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2021-05-20
      • 2021-05-24
      • 2011-10-01
      • 2011-02-11
      相关资源
      最近更新 更多