![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Если в классе определён конструктор по ссылке и оператор присваивания, гарантирует ли это от того, что объекты этого класса НИКОГДА не будут копироваться побитово, то есть, в обход этих операторов?
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
zim22, и все равно от memcpy это не спасет
![]() |
|||
|
||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Что в твоём понимании значит "переопределить"? ![]()
Т.е., по-твоему, следующая программа "1" должна вывести? ![]()
|
||||
|
|||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
Здесь неявный вызов конструктора копирования. Добавлено через 22 секунды Т.е.
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
niXman |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
Еще
забыл. Добавлено через 1 минуту и 20 секунд
Так и есть, если написать так:
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
||||||
|
|||||||
UnrealMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Кто и где? ![]() |
||||
|
|||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
UnrealMan, Ты. В функции int main()
--------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Ясно, что от memcpy не спасёт. Мне больше интересно, не возникает ли побитовое копирование в каких-то частных случаях.
Например, есть класс A, в котором есть конструктор по ссылке и оператор присваивания. Допустим, есть ещё класс B, в котором ничего этого нет, но есть член типа A. Что будет при присваивании B к B? Член типа A как скопируется? |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
UnrealMan, зачем демагогию устраивать?
конструтор копирования B копирует свою часть класса (которой типа нету) побитово и вызывает конструктор копирования A, который уже не по-умолчанию. смысл придираться? |
|||
|
||||
niXman |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 211 Регистрация: 4.7.2009 Репутация: 0 Всего: 0 |
Это называется конструктор копирования. UnrealMan, Не нужно путать инициализацию и присваивание. --------------------
if ( !c++ ) { *power--; this->wussiness += 10;} |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
в твое случае член типа A скопируется c помощью своего оператора присваивания если переопределить operator= и конструктор копирования, то побитово класс уже копироваться не будет если хотят сделать класс некопируемым, то часто просто запихивают обе эти функции в приват (ну, или наследуют от boost::noncopyable) |
|||
|
||||
zim22 |
|
||||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я думаю небо с землёй поменяются местами, когда UnrealMan начнёт путать инициализацию и присваивание. ![]() смысл есть. я вот открыл Стандарт и вычитал, что члены копируются не побитово, а почленно.
define. declare. короче говоря, объявить функцию, которая имеет следующий вид:
нет. 2 выведет, т.к. в иерархии наследования если в производном классе не определён конструктор копирования, то используется его версия из базового класса. Это сообщение отредактировал(а) zim22 - 21.10.2009, 21:42 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |