Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Если одно из полей класса - ссылка... |
Автор: Alek86 21.12.2007, 20:08 | ||
скрпировал с прошлой своей темы, так как этот вопрос к ней не относится http://www.boost.org/doc/html/signals/tutorial.html#id1628358 встретился такой класс
что случится, если я сделаю Document doc; View view1(doc); View view2(view1); // ??? View view3(doc); view3 = view1; // ??? это что, ошибка при создании класса (из-за того, что писали его не как реальный)? просто такое "упущение" я встречаю не первый раз в умных источниках или тут вообще никакого упущения нет? |
Автор: srd 21.12.2007, 20:24 |
Для подобных классов компилятор не генерирует конструктор копирования и оператор присваивания по умолчанию. Соответственно, строчки // ??? компилироваться не будут ![]() |
Автор: Alek86 21.12.2007, 20:49 | ||||
VS 2005 компилирует Добавлено @ 20:49 так
не компилит, правда, но все же |
Автор: srd 21.12.2007, 21:16 |
Ага, ошибся. Конструктор копирования всё-таки генерируется и работает. Хотя, для меня это неожиданно. |
Автор: crazy_hand 21.12.2007, 22:21 |
Может я чего-то не понимаю, но: Alek86, если ты так сделаешь - то будет ошибка, так как там чисто виртуальная функция. srd, конструктор копирования и оператор присваивания всегда для классов автоматически создаются. Поправьте, если я не прав. |
Автор: archimed7592 21.12.2007, 23:45 | ||||
crazy_hand, причём тут виртуальные ф-ции? 0_о Создаются не всегда. Есть несколько правил, когда они неявно объявляются, когда неявно определяются. В двух словах: неявно объявляются всегда, кроме случая, когда пользователь сам написал свой КК/ОП. Неявно объявленный КК/ОП неявно определяется при попытке явно или неявно вызвать его(КК/ОП). Неявное определение КК выглядит как
Если такое определение по тем или иным причинам некорректно, то программа некорректна. ОП выглядит так:
Соответственно, в случае члена-ссылки, ОП будет некорректен и при любой попытке его использовать получишь еггог. Если хочешь более подробно, то читай соответствующий раздел Стандарта(там целый подпункт "special member functions"). |
Автор: crazy_hand 22.12.2007, 00:21 | ||||||||
archimed7592
В первом посте:
-Ну это само собой.
Это всё очевидно для меня. Не понял вообще к чему ты это всё писал?! Вот только у меня вопрос: в чем логика того, что неявный ОП не работает с элементами ссылками? |
Автор: archimed7592 22.12.2007, 11:34 | ||
Что-то не похоже, что для это всё для тебя очевидно... ну да ладно ![]() Писал я это Алеку. |