170 похожих чатов

В каком случае надо использовать такое объявление деструктора: virtual ~type() =

default;

?

22 ответов

1 просмотр

это объявление виртуального деструктора. Там где требуется, как минимум в виртуальных классах

d7d1cd- Автор вопроса

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

d7d1cd- Автор вопроса
Anatoly Shirokov
чтобы не писать пустое тело реализации, если на эт...

А если в иерархии классов в одном классе пишут virtual ~deriv() = default;, в другом пишут virtual ~deriv2() {} в третьем вообще не объявляют деструктор никак, то это норм или могут быть проблемы?

никаких, главное, чтобы пустое или дефолтное тело было осознанным: у тебя все динамические ресурсы под контролем

d7d1cd
А если в иерархии классов в одном классе пишут vir...

главное, чтобы оно в базовом классе было, через указатель на который все эти наследники полиморфно педалируются

d7d1cd
А если в иерархии классов в одном классе пишут vir...

если где-то по цепочке наследований будет в реализации выделение памяти, то нужно в этом виртуальном деструкторе его высвободить. Просто принято его явно указывать, даже пустой, чтобы было очевидно что память не выделяется

Anatoly Shirokov
никаких, главное, чтобы пустое или дефолтное тело ...

А есть разница между пустым и дефолтным телом?

d7d1cd- Автор вопроса
Anatoly Shirokov
нет, по сути.

А вот для конструкторов где-то читал/видел, что это не так и пустой конструктор это не то же самое, что объявленный со словом default.

Anatoly Shirokov
нет, по сути.

Привет , основной акк попал в бан из за спама . Можно его как ни будь вытащить ?

d7d1cd
Смущает default. Зачем его тут употреблять?

Чтобы не писать пустое тело деструктора явно и не делать отдельно определение этой функции-члена

d7d1cd- Автор вопроса

По теме default или пустое тело для конструктора. Пример. Спасибо Константину Владимирову.

d7d1cd- Автор вопроса
d7d1cd
По теме default или пустое тело для конструктора. ...

Я же правильно понимаю, что тут каст Bar в int - это UB?

d7d1cd- Автор вопроса
Sergey Anisimov
Да.

Скажите, а есть ли подвох с деструктором с пустым телом и деструктором с default?

d7d1cd
Скажите, а есть ли подвох с деструктором с пусты...

Пустотелый остается нетривиальным, тривиальность разрушения - одно из необходимых условий для trivially-copyable, trivial и implicit-lifetime. Эти свойства, в свою очередь, позволяют многие неявные операции с лайфтаймами выполнять.

Michael
Почему?

Вычисление (lval->rval) indeterminate value у Bar::x.

Sergey Anisimov
Вычисление (lval->rval) indeterminate value у Bar:...

UB происходит в тот момент, когда мы используем indeterminate value и при этом не важно как?

Michael
UB происходит в тот момент, когда мы используем in...

Когда оно "вычисляется", да. Вычисление - это lval->rval преобразование (получение элемента множества значений, соответствующего текущей репрезентации значения). Подробно про это (и исключения из правила) здесь.

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
Карта сайта