Что может пойти не так, если вы не передадите объекты по ссылке в функцию - PullRequest
3 голосов
/ 19 мая 2011

Я пытаюсь научить некоторых студентов, что в следующем случае вы должны пройти по ссылке, в противном случае объекты будут скопированы.

примечание: они еще не знают о конструкторах копирования, поэтому, если возможно, я не хотел бы упоминать их в примере.

int sumOfSizes(CObject const & a, CObject const & b)
{
    return a.getSize() + b.getSize();
}

Может ли кто-нибудь помочь мне с примером из реальной жизни, где сумма является фактической, а не ожидаемой?

1 Ответ

6 голосов
/ 19 мая 2011

Как подразумевает @ Space_C0wb0y в своем комментарии, единственный способ, которым это может сделать что-то "неожиданное" при передаче по значению, - это если конструктор копирования для CObject сделал что-то "неожиданное" (такое, что локальные экземпляры CObject не были эквивалент (в любом смысле) оригинальным экземплярам). Это, в свою очередь, указывает на плохой дизайн.

Следовательно, вашему контрпримеру придется полагаться на придуманный, плохо спроектированный CObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...