![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Здравствуйте.
Не могу понять, для чего в новом стандарте ввели конструкцию =default; для конструкторов и деструкторов. Несколько раз перечитал это, но всё равно ничего не понял. Подскажите, пожалуйста, чем отличается это
от этого
и от этого
И тот же вопрос про деструкторы (как про обычные, так и виртуальные). Спасибо. P.S. Чем отличается это
от этого
объяснять не нужно )) Добавлено через 2 минуты и 2 секунды Если не сложно, то объясните ещё про =delete; Чем это
отличается от этого
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||||||||
|
|||||||||||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
borisbn, подумай, что ты будешь делать, если тебе нужно заменить конструктор копирования, а дефолтный конструктор ты хочешь оставить умолчальным (например, чтобы использовать конструкции вида Class x = {1,2,3,4};)
С delete все аналогично. Во втором случае даже "друзья" и "члены" не смогут вызвать дефолтный конструктор. Да и компилятор в любом случае ругнется правильней. |
|||
|
||||
borisbn |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ясно. принято.
а тут не очень. ну... меняю я конструктор копирования, умолчальный при этом пропадает. Это ясно. А чем это
отличается от этого
? Добавлено через 47 секунд и что с деструкторами ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||
|
|||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
всё равно не понятно... если бы компилятор не давал бы передавать non-trivial объекты в функции типа memcpy, то я бы понял. А так... ну какая мне по большому счёту разница, trivial или нет мой класс ?
Если я сделаю так
компилятор меня не остановит... к сожалению И опять же, чем A(){} от A() = default; отличается ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
я же написал! в случае с дефолтным конструктором можно использовать инициализацию всех полей класса в месте определения. А в случае кастомного - нельзя. Как только у тебя дефолтный конструктор становится нетривиальным (A(){} - это нетривиальный конструктор), то с твоего класса тут же снимается маркировка POD со всеми вытекающими. Таким образом, без возможности объявить конструктор по умолчанию дефолтным, без потери POD ты не можешь сделать другие конструкторы, которые тебе, возможно, очень бы пригодились. |
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ок. Это ясно. Но всё равно остаются вопросы, вернее просьба - не могли бы Вы привести пример (не просто Class x = { 1, 2, 3, 4 };, а рабочий), в котором без =default; что-то не компилируется, а с ним - работает. У меня такое
не работает... И чем тогда отсутствие кастомного конструктора отличается от A() = default; ? Сорри за тупые вопросы, но теория у меня всегда хромала... мне бы примерчик )) Это сообщение отредактировал(а) borisbn - 11.1.2013, 14:40 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
ну значит или компилятор не поддерживает, или я ошибся с примером (скорее всего).
|
|||
|
||||
borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
проверял на LWS
http://liveworkspace.org/code/2k3V9U$2 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
volatile |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Когда определен какой-то конструктор, не важно какой, скажем:
то невозможно создать объект по умолчанию. А а; // <== не скомпилируецца. Чтобы скомпилировалось, раньше нужно было создавать пустой конструктор: A() {} Сейчас достаточно написать A () = default; Разница правда не столь существенна, но все-же так чищще, и определенней. Кроме того
имхо. Это сообщение отредактировал(а) volatile - 12.1.2013, 00:04 |
||||||
|
|||||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Ну и кроме, того, в тех случаях когда можно писать а можно и не писать дефолный конструктор,
явное указание говорит о том что мы не забыли его написать, а что именно это мы и хотели получить. (стилевое улучшение как бэ..) Что интересно, пробовал его поместить в приватную часть. но он молча компилируецца как публичный. (в принципе компилятору неплохо бы ругаться в этом случае...) |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
т.е. всё-таки нет разницы ? не верится, что в стандарт ввели эту фичу исключительно для стиля... про const тоже можно было бы сказать "для стиля", однако все понимают, что это не так... в общем, понимания пока нет. А с деструктором - тем более... ждёмс... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Наверное пока еще никто не понимает зачем., а чтение мануалов результата не дает.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
borisbn, стиль - не много не то слово. Точнее - большая самодокумментируемость, и определенность. Страус, как бэ открытым текстом говорит, что это излишество.
Кроме того эта фича полезна для копи-мув конструкторов. Если определить кастомный копи конструктор, то дефолтный move контруктор не будет автоматически создан. И если он нужен, то придецца его писать. А это не просто пустой оператор {}. Там придецца напрячься. =default решает эту проблему. http://www.stroustrup.com/C++11FAQ.html#default Это сообщение отредактировал(а) volatile - 12.1.2013, 23:09 |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ага... что-то проясняецца ))
? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |