Почему конструктор копирования должен принимать ссылку?
От: Максим Рогожин Россия  
Дата: 21.04.17 07:22
Оценка:
Привет всем!

Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так
class A {
public:
   A(const A obj) {} // copy ctor
};
?
Re: Почему конструктор копирования должен принимать ссылку?
От: rg45 СССР  
Дата: 21.04.17 07:56
Оценка: 7 (2) +6
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет всем!


МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так

МР>
МР>class A {
МР>public:
МР>   A(const A obj) {} // copy ctor
МР>};
МР>
?


А временный объект, передаваемый по значению, каким конструктором должен быть создан?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 21.04.2017 7:57 rg45 . Предыдущая версия .
Re: Почему конструктор копирования должен принимать ссылку?
От: AlexGin Беларусь  
Дата: 21.04.17 09:40
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет всем!


МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так

МР>
МР>class A {
МР>public:
МР>   A(const A obj) {} // copy ctor
МР>};
МР>
?


Кроме того, что в этой ветви сообщали, есть ещё один важный момент:
Ссылка на стеке занимает намного меньше места, нежели сам объект.
Передача именно параметра ссылки (константной ссылки) — позволяет также экономить место в стеке.

P.S. Сделай, для интересу так:
Хорошо бы еще добавить в class A несколько мемберов
int iObjectSize = sizeof(A);
int iRefSize = sizeof(A&);

...что окажется больше?
Re: Почему конструктор копирования должен принимать ссылку?
От: MasterZiv СССР  
Дата: 21.04.17 13:25
Оценка: 8 (2) +2 :)
Здравствуйте, Максим Рогожин, Вы писали:

МР>Почему конструктор копирования обязательно должен принимать параметр-ссылку? Почему нельзя так


Почему нельзя ?
Можно, но тут есть казус...
Чтобы передать параметр в такой копи-конструктор, нужно будет создать копию объекта.
А чтобы сделать копию объекта, нужно будет вызвать конструктор копирования. А чтобы
вызвать конструктор копирования, нужно будет создать копию объекта, а чтобы создать
копию объекта, нужно будет вызвать конструктор копирования.

...
фу, устал уже...
Re[2]: Почему конструктор копирования должен принимать ссылку?
От: MasterZiv СССР  
Дата: 21.04.17 13:26
Оценка: +2 :)
Здравствуйте, AlexGin, Вы писали:

AG>Кроме того, что в этой ветви сообщали, есть ещё один важный момент:

AG>Ссылка на стеке занимает намного меньше места, нежели сам объект.
AG>Передача именно параметра ссылки (константной ссылки) — позволяет также экономить место в стеке.

Да ладно уж, такая мелочь после гарантированной бесконечной рекурсии ...
Re[2]: Почему конструктор копирования должен принимать ссылку?
От: Максим Рогожин Россия  
Дата: 21.04.17 15:35
Оценка:
Здравствуйте, rg45, Вы писали:

R>А временный объект, передаваемый по значению, каким конструктором должен быть создан?


А! Точно, точно, точно))) Спасибо)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.