Разница между возвращением объекта и ссылки на объект (С++)

программирование C++

В моём классе Point есть метод, который возвращает *this. Есть ли в этой ситуации разница, обозначать тип метода как Point или как Point&?
Ответы:
Да, есть.
Point - создание нового экземпляра класса, путем вызова конструктора копирования.
Point& - возврат указателя на существующий экземпляр. При этом не тратится время на копирование и изменение значения, возвращенного этим методом будет влиять на оригинал. Собственно сам оригинал и будет изменяться.
Если вы вернете объект по ссылке (Point&), то в данном случае у вас будет утечка памяти. Т.к. при возвращении *this будет создан новый объект в куче (через конструктор копирования) и будет возвращена на него ссылка. Но не имея указателя на объект (а имея только ссылку), вы не сможете его удалить, когда он вам будет не нужен, следовательно он у вас все время будет висеть в памяти.
P.S. А можно спросить зачем вы возвращаете *this? Это довольно странно само по себе, ведь для таких вещей предназначен конструктор копирования.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.