выше конструирует объект CPlayer в стеке, поэтому он не нуждается в new
. Вам нужно всего лишь использовать new
, если вы пытаетесь выделить объект CPlayer в куче. Если вы используете выделение динамической памяти, код будет выглядеть следующим образом:
CPlayer *newPlayer = new CPlayer(position, attacker);
Обратите внимание, что в данном случае мы используем указатель на объект CPlayer, который необходимо будет очищен с помощью согласующего вызова delete
, Объект, выделенный в стеке, будет автоматически уничтожен при выходе из области видимости.
На самом деле было бы проще и более очевидным, чтобы написать:
CPlayer newPlayer(position, attacker);
Многие компиляторы оптимизируют версию, размещенную на выше в любом случае, и это более читаемой. не
Блестящий, спасибо. –
На самом деле компилятор, вероятно, оптимизирует его. В этом случае конструктор копирования не будет вызван. http://stackoverflow.com/questions/1758142/why-copy-constructor-is-not-called-in-this-case – BostonLogan
Назначение в объявлении не менее эффективно, чем использование синтаксиса конструктора. Если бы они были отдельными заявлениями, то было бы правильно, если бы было замечание о временных. Суть в том, что это объявляет CPlayer (обычно в стеке), а не выделяет пространство для него из свободного хранилища (кучи). –