使用成员函数来处理堆中的对象(c++)

Using member functions to deal with objects in the heap (c++)

本文关键字:对象 c++ 成员 函数 处理      更新时间:2023-10-16

我是C++的初学者,这是一个非常基本的语法问题,但我似乎在其他地方找不到答案。欢迎任何意见。这是问题的简化版本。

假设我有一对

class pair
   {
   int a;
   int b;
   public:
   pair(int x,int y)
     {
     a=x;
     b=y;
     }
   int lookup()
      {
      return this->a+b;
      }
    };

然后我将该实例实例化并复制到堆上的某个位置。

int func()
{
...
pair test(1,2);
pair *ptr=new pair;
*ptr=test;
}

现在是关键。函数结束后,我不会破坏此内存分配。我想稍后在其他函数中使用它。问题是,我宁愿把它放在堆里,而不必把它复制到堆栈中(在实际的程序中,它非常大)。因此,我想做这样的事情:

int otherfunc()
{
...
int sum=*ptr.lookup;
}

但是我得到了一个编译器错误。我最终不得不做这样的事情:

int otherfunc()
{
...
point temp=*ptr;
int sum=temp.lookup;
}

虽然这是有效的,但它是多余的,当处理真正大的事情时,它甚至可能导致溢出。有人知道在将指针保留在堆中的同时使用指针调用方法的语法吗?谢谢

我相信这就是你想要做的:

int sum = ptr->lookup();

顺便说一句,这个:

return this->a+b;

这可能会更好:

return a+b;

表达式*ptr.lookup将被解释为*(ptr.lookup),这就是为什么会出现语法错误,因为ptr.lookup没有意义。您需要首先使用括号告诉编译器取消引用ptr(*ptr).lookup

因为指针在C(和C++)中很常见,所以(*a).b可以用更简单的形式编写:a->b

此外,即使lookup不采用任何参数,它也是一个函数。你需要用():来称呼它

int sum=ptr->lookup();