Я пытался решить эту проблему в Google, и не могу найти ничего, что мне кажется актуальным. Поэтому я должен искать не ту вещь; тем не менее, я был бы признателен за совет ...
Foobar &foobar = *new Foobar(someArg, anotherArg);
Это только у меня так или кажется вонючим?
Я понимаю, что ключевое слово new
предназначено для использования с указателями (как таковые):
Foobar *foobar = new Foobar(someArg, anotherArg);
Но что, если вам не нужен указатель на этот экземпляр, и вы вместо этого хотите использовать ссылку? Или это тот случай, когда вам не нужно явно инициализировать его (так же, как локальные переменные); и если это так, что если я хочу инициализировать с параметрами?
Следующее не работает (если я не делаю что-то не так):
// the last argument is of type: int
Foobar &foobar(someArg, anotherArg);
... выдает ошибку компилятора:
список выражений инициализатора, рассматриваемый как составное выражение
неверная инициализация неконстантной ссылки типа «Foobar &»
из временного типа "int"
А также, похоже, это не работает:
Foobar &foobar = Foobar(someArg, anotherArg);
... выдает ошибку компилятора:
ошибка: неверная инициализация неконстантной ссылки типа
‘Foobar &’ из временного типа ‘Foobar’
Обновление 1:
Имейте в виду, что я возвращаю это значение, поэтому я не хочу использовать локальную переменную; Я хочу использовать значение в куче, а не в стеке:
Foobar &helloWorld()
{
Foobar &foobar = *new Foobar(someArg, anotherArg);
foobar.HelloWorld();
return foobar;
}
Должен ли я просто использовать указатели вместо этого, или это полностью допустимо?