Использование конструктора для возврата - PullRequest
9 голосов
/ 15 апреля 2010

Просто быстрый вопрос.

Я написал некоторый код, который возвращает пользовательский класс Command, и код, который я написал, кажется, работает нормально. Мне было интересно, есть ли какие-то причины, по которым мне не следует так поступать. Это примерно так:

Command Behavior::getCommand ()
{
  char input = 'x';

  return Command (input, -1, -1);
}

В любом случае, я читал, что конструкторы не должны иметь возвращаемого значения, но это работает в g ​​++.

Спасибо за любой совет,

1010 * Рис *

Ответы [ 4 ]

7 голосов
/ 15 апреля 2010

Сам конструктор не имеет возвращаемого значения. Это создает временный объект Command и возвращает созданный объект вызывающей стороне. Это фактически так же, как если бы вы сказали:

Command temp(input, -1, -1);
return temp;

Это будет работать на любом компиляторе C ++.

2 голосов
/ 15 апреля 2010

getCommand не конструктор. Вышеупомянутое вполне допустимо и в целом эффективно, благодаря оптимизации возвращаемого значения (RVO), которая (я думаю) не будет применима, если вы создадите экземпляр локальной переменной и вернете ее.

1 голос
/ 15 апреля 2010

Конструктор не имеет возвращаемого значения; вы явно создаете временный экземпляр класса и возвращаете его. В этом нет ничего плохого, кроме того, что он сделает копию.

Если вы хотите избежать копирования, у вас есть несколько вариантов, одним из которых является параметр out, равный Command*, использование new и delete.

0 голосов
/ 15 апреля 2010

У вас нет конструктора с возвращаемым значением. Command::Command(char, int, int) ваш конструктор.

У вас есть метод, который возвращает объект, что совершенно нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...