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

时间:2012-02-26 10:08:51

标签: c++ syntax

我是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;
}

虽然这有效,但它是多余的,当处理非常大的事情时,它甚至可能导致溢出。任何人都知道使用指针调用方法同时将其保留在堆上的语法?感谢。

2 个答案:

答案 0 :(得分:4)

我相信这就是你要做的事情:

int sum = ptr->lookup();

除此之外,还有:

return this->a+b;

这可能会更好:

return a+b;

答案 1 :(得分:1)

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

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

此外,lookup即使不采用任何参数也是一个功能。您需要使用()

进行调用
int sum=ptr->lookup();