Страницы

Поиск по вопросам

пятница, 19 октября 2018 г.

Неправильный конструктор копирования

В следующем фрагменте кода:
#include #include
using std::cout;
class Point { int x;
public: Point(int x) { this->x = x; }
Point(Point p) { x = p.x; }
int getX() { return x; } };
int main(int argc, char* argv[]) {
Point p1(10); Point p2 = p1;
printf("%d", p2.getX()); return 0; }
Компилятор выдает такую ошибку:
invalid constructor; you probably meant 'Point (const Point&)
Почему так происходит?


Ответ

В C++ конструктор копирования не может принимать копию объекта этого же класса, а вот по ссылке может (т.е. в вашем случае подойдет Point(Point& p), либо Point(const Point& p)).

Представим, что такое допустимо
Получается, что таким образом вы переопределяете конструктор копирования по умолчанию, тогда у компилятора не остается выбора (на самом деле просто запрещен такой вызов, но так звучит убедительнее) кроме как попытаться снова вызвать именно ваш конструктор копирования для передачи параметра в ваш же конструктор копирования и так далее (бесконечная рекурсия получается).

Комментариев нет:

Отправить комментарий