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

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

может не создавать дефолтный деструктор, если в описании класса он не указан?
И если нет, то в чём тогда смысл наличия конструкции decl-specifier-seq(optional) ~ class-name () = default; ?

16 ответов

8 просмотров

Ещё =default можно переменить не только к деструктору

Павел-Бабяк Автор вопроса
Alexy Hudyaev
Ещё =default можно переменить не только к деструкт...

Ага и к конструктору тоже. И там тот же вопрос.

Ещё деструктор можно сделать виртуальным

Павел-Бабяк Автор вопроса
Alexy Hudyaev
Ещё деструктор можно сделать виртуальным

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

Павел Бабяк
Ну в общем default походу это чисто эстетическая в...

Конструктор не всегда будет сгенерирован, иногда нужно сказать компилятору чтобы генерил его. На счёт деструктора наверно да, тем не менее это функция, которую компилятор может сгенерить, так что логично туда применять =default

Бывает.

Павел-Бабяк Автор вопроса
Ilya Zviagin
Бывает.

Например? Стандарт говорит, что компилятор обязан его сгенерировать.

Что-то ты вообще херню написал, а я не заметил... Дефолтным бывает только конструкторы. Деструктор вообше только один. (Хотя в последних стандартах разрешено делать несколько вариантов проектов деструкторов, но потом он всё равно один)

Павел-Бабяк Автор вопроса
Alexy Hudyaev
Конструктор не всегда будет сгенерирован, иногда н...

Стандарт говорит, что если не определён/удалён явно, то всегда генерируется как inline public member of its class

Павел Бабяк
Стандарт говорит, что если не определён/удалён явн...

Нет, компилятор не генерирует деф конструктор, если есть пользовательский

Павел-Бабяк Автор вопроса
Ilya Zviagin
Что-то ты вообще херню написал, а я не заметил... ...

Пардонмуа за мой французский, но херню ты написал.

Павел-Бабяк Автор вопроса
Ivan Afanasyev
Нет, компилятор не генерирует деф конструктор, есл...

А теперь прочти моё первое сообщение, где говорится о применении ~classname() = default

Ты можешь не объявлять деструктор явно, он создастся неявно. Такое ты можешь явно объявить деструктор и задать его реализацию как реализацию по умолчанию

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

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

А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
8
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
just use free version ?? pycharm has a free version
Fan / Ac
9
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
В си можно напрямую работает с памятью и процом?
Николай
7
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
Карта сайта