функции-члены и конструктор копирования - PullRequest
1 голос
/ 08 декабря 2011

Вы должны явно перечислить все элементы, которые вы хотите скопировать, в конструкторе копирования, это означает, что вы можете настроить конструктор копирования для копирования урезанных версий вашего объекта.

но как работает функция копирования? все функции-члены включаются автоматически? Это потому, что объект на самом деле является просто членами, а функции просто объявляют, как можно использовать класс? Означает ли это, что теоретически вы можете создавать урезанные объекты с помощью конструктора копирования, а затем, например, вызывать метод получения, чтобы получить член, которого нет в вашей копии?

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

Функции-члены не хранятся в экземплярах классов.Это просто обычные функции.Однако указатель Vtable может быть сохранен.Он используется для динамической отправки виртуальных функций-членов.

Обычные вызовы функций-членов определяются во время компиляции.

(примечание: в некоторых языках хранятся копии методов.за экземпляр, хотя C ++ не входит в их число)

4 голосов
/ 08 декабря 2011

Функции не имеют отдельного экземпляра для каждого экземпляра;характеристика (нестатической) функции-члена не в том, что она будет создаваться для каждого экземпляра, а в том, что она должна вызываться для экземпляра и неявно получать указатель на экземпляр.Там нет копирования функций.(На самом деле, функции - член или иное - не могут быть скопированы.)

0 голосов
/ 08 декабря 2011

Вероятно, существует неправильное понимание того, какие классы / объекты есть в C ++.В некоторых языках (например, python) объекты могут изменяться (новые переменные / функции);в C ++ объекты являются статическими, как указано в классе, поэтому нельзя уменьшить версию вашего объекта.

Конструктор копирования по умолчанию уже делает член в копии члена.Если этого недостаточно (мелкая копия <-> глубокая копия), вы должны предоставить собственную версию конструктора копирования, в которой вам нужно выполнить все копирование.Если не скопировать участника, оставленная копия будет оставлена ​​с неопределенным участником или членом по умолчанию.Лучше всего избегать создания собственного конструктора копирования, избегая динамической памяти и тому подобного.

...