Взятие объекта по адресу в конструторе копирования

299
06 июня 2017, 00:29

Всем добрый день. Стандартный конструктор копирования в классе выглядит так: SomeClass(const SomeClass &obj) Как я понимаю, const отвечают за то, что в процессе его работы объект не может быть изменен и отвечает по большей степени за безопасность кода. Тогда подскажите, зачем в конструктор копирования передается объект по ссылке, а не по значению, если он все равно const.

Answer 1

В конструкторе копирования нужна именно ссылка на объект, так как если мы попробуем передавать объект по значению, то будем вызывать конструктор копирования внутри себя:

class Foo {
     public:
    Foo(const Foo&){
            std::cout << "copy constructor";
        };
    Foo(){}
};
void f(Foo) {
}

Если попробовать вызывать функцию f, то можно увидеть, что при передаче объекта по значению вызывается конструктор копирования. Представим себе, что теперь в конструктор копирования можно было бы передать объект по значению, тогда для того, чтобы передать этот объект пришлось вызвать бы конструктор копирования, а внутри него снова конструктор копирования... Ясна проблема?

READ ALSO
Оператор присваивания и swap

Оператор присваивания и swap

Добрый деньЕсть такая реализация Оператора присваивания

283
Вывод по ключу в порядке убывания.

Вывод по ключу в порядке убывания.

Есть простая хеш-функция key%m; Массив из m=20 элементов Есть 100 объектов, с рандомными ключамиМассив представляет собой массив стеков

342
Плагин MMENU jquery

Плагин MMENU jquery

При нажатие на меню, страницу скроллит вверх и только после этого открывается меню на фотке скрипт включения, в библиотеке ничего не менял,...

383
jQuery нажать на ссылку с текстом

jQuery нажать на ссылку с текстом

Как в Jquery программными средствами нажать на элемент ?

339