Использование функций-членов для работы с объектами в куче (c ++) - PullRequest
1 голос
/ 26 февраля 2012

Я новичок в C ++, и это довольно простой синтаксический вопрос, но я не могу найти ответ в другом месте. Любой вклад будет приветствоваться. Вот упрощенная версия проблемы.

Скажем, у меня есть класс 'pair'

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 ]

4 голосов
/ 26 февраля 2012

Я считаю, что это то, что вы пытаетесь сделать:

int sum = ptr->lookup();

И как в стороне, это:

return this->a+b;

Возможно, было бы лучше, как это:

return a+b;
1 голос
/ 26 февраля 2012

Выражение *ptr.lookup будет интерпретировано как *(ptr.lookup), поэтому вы получите синтаксическую ошибку, поскольку ptr.lookup не имеет смысла. Сначала нужно указать разыменование компилятора ptr, используя круглые скобки: (*ptr).lookup.

Поскольку указатели распространены в C (и C ++), (*a).b можно записать в более простой форме: a->b.

Кроме того, lookup - это функция, даже если она не принимает никаких параметров. Вам нужно позвонить с ():

int sum=ptr->lookup();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...