Я пробовал 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;
}
Должен ли я использовать указатели вместо этого, или это полностью допустимо?