Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет всем!
МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так МР>
МР>class A {
МР>public:
МР> A(const A obj) {} // copy ctor
МР>};
МР>
?
А временный объект, передаваемый по значению, каким конструктором должен быть создан?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, Максим Рогожин, Вы писали:
МР>Привет всем!
МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так МР>
МР>class A {
МР>public:
МР> A(const A obj) {} // copy ctor
МР>};
МР>
?
Кроме того, что в этой ветви сообщали, есть ещё один важный момент:
Ссылка на стеке занимает намного меньше места, нежели сам объект.
Передача именно параметра ссылки (константной ссылки) — позволяет также экономить место в стеке.
P.S. Сделай, для интересу так:
Хорошо бы еще добавить в class A несколько мемберов
int iObjectSize = sizeof(A);
int iRefSize = sizeof(A&);
...что окажется больше?
Re: Почему конструктор копирования должен принимать ссылку?
Здравствуйте, Максим Рогожин, Вы писали:
МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так
Почему нельзя ?
Можно, но тут есть казус...
Чтобы передать параметр в такой копи-конструктор, нужно будет создать копию объекта.
А чтобы сделать копию объекта, нужно будет вызвать конструктор копирования. А чтобы
вызвать конструктор копирования, нужно будет создать копию объекта, а чтобы создать
копию объекта, нужно будет вызвать конструктор копирования.
...
фу, устал уже...
Re[2]: Почему конструктор копирования должен принимать ссылку?
Здравствуйте, AlexGin, Вы писали:
AG>Кроме того, что в этой ветви сообщали, есть ещё один важный момент: AG>Ссылка на стеке занимает намного меньше места, нежели сам объект. AG>Передача именно параметра ссылки (константной ссылки) — позволяет также экономить место в стеке.
Да ладно уж, такая мелочь после гарантированной бесконечной рекурсии ...
Re[2]: Почему конструктор копирования должен принимать ссылку?