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

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

default;

?

22 ответов

15 просмотров

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

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 преобразование (получение элемента множества значений, соответствующего текущей репрезентации значения). Подробно про это (и исключения из правила) здесь.

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта