почему «копирование» ссылки в конструкторе копирования все еще работает? - PullRequest
0 голосов
/ 02 февраля 2012

Мне сказали, что если у вас есть ссылка в классе, вы должны создать new версии этого класса, а не копировать их. Зачем? Потому что вы на самом деле ссылаетесь на оригинальную вещь, когда назначаете ссылку, и поэтому вы на самом деле ничего не делаете. Дело в том, почему это все еще работает?

Мои GameObjects содержат ссылки на Meshes, и я могу скопировать их в порядке, и все они отображаются в нужных местах и ​​все.

1 Ответ

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

Конструктор копирования инициализирует новую ссылку, что нормально.

Что вы не можете сделать, это переназначить ссылку позже.

Вот пример, предполагая, что ваш класс может быть создан путем предоставления Mesh, на который он сохраняет ссылку:

Mesh mesh;
GameObject o1(mesh);      // OK: initialising reference o1.mesh
GameObject o2(o1);        // OK: initialising reference o2.mesh
o1 = o2;                  // Error: attempt to reassign reference o1.mesh

(Это предполагает, что вы не определяете оператор копирования-присваивания. Есливы сделаете это, тогда вам придется оставить ссылку в покое.)

...