Тема деструкторы
От: LaptevVV Россия  
Дата: 06.04.26 05:11
Оценка:
Читаю тут драфт № 4849 от 2020-01-14
Пункт 11.4.6
И с удивлением вижу Destructors
Пункт 4 там:

At the end of the definition of a class, overload resolution is performed among the prospective destructors
declared in that class with an empty argument list to select the destructor for the class, also known as the
selected destructor.

Их теперь может быть несколько ?
А как ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Тема деструкторы
От: andrey.desman  
Дата: 06.04.26 06:34
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Их теперь может быть несколько ?

LVV>А как ?
requires
Re: Тема деструкторы
От: rg45 СССР  
Дата: 06.04.26 06:41
Оценка: 28 (4)
Здравствуйте, LaptevVV, Вы писали:

LVV>Читаю тут драфт № 4849 от 2020-01-14

LVV>Пункт 11.4.6
LVV>И с удивлением вижу Destructors
LVV>Пункт 4 там:
LVV>

At the end of the definition of a class, overload resolution is performed among the prospective destructors
LVV>declared in that class with an empty argument list to select the destructor for the class, also known as the
LVV>selected destructor.

LVV>Их теперь может быть несколько ?
LVV>А как ?

Тут идёт речь о деструкторах, объявленных в шаблонах классов. Их действительно может быть несколько но(!) они должны быть объявлены с разными констрейнтами (секции requires) так, чтоб для каждого конкретного воплощения шаблона класса эти констрейнты оставляли только один экземпляр деструктора. Констрейны не обязательно должны быть взаимоисключающими (как при использовании SFINAE), они могут быть уточняющими. Т.е. это случай, когда один деструктор создаёт лучшее соответсвие типа, чем другой. Например:

template<typename T>
class my_ptr
{
    std::remove_extent_t<T>* m_p{};
public:
    ~my_ptr() requires std::is_array_v<T> { delete[] m_p; }
    ~my_ptr() { delete m_p; }
};
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 06.04.2026 7:14 rg45 . Предыдущая версия . Еще …
Отредактировано 06.04.2026 6:41 rg45 . Предыдущая версия .
Re[2]: Тема деструкторы
От: LaptevVV Россия  
Дата: 06.04.26 09:01
Оценка:
LVV>>Их теперь может быть несколько ?
LVV>>А как ?
R>Тут идёт речь о деструкторах, объявленных в шаблонах классов. Их действительно может быть несколько но(!) они должны быть объявлены с разными констрейнтами (секции requires) так, чтоб для каждого конкретного воплощения шаблона класса эти констрейнты оставляли только один экземпляр деструктора. Констрейны не обязательно должны быть взаимоисключающими (как при использовании SFINAE), они могут быть уточняющими. Т.е. это случай, когда один деструктор создаёт лучшее соответсвие типа, чем другой. Например:

R>
R>template<typename T>
R>class my_ptr
R>{
R>    std::remove_extent_t<T>* m_p{};
R>public:
R>    ~my_ptr() requires std::is_array_v<T> { delete[] m_p; }
R>    ~my_ptr() { delete m_p; }
R>};
R>

Спасибо!
Я до этого еще не дошел.

А ты можешь книжки писать.
Или преподавать.
Просто и понятно излагаешь, что для студентов самое важное.

Про меня то же самое многие мне говорили — просто и понятно излагаю.
Поэтому 33 года уже почти и преподаю...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Тема деструкторы
От: rg45 СССР  
Дата: 06.04.26 09:15
Оценка: :))
Здравствуйте, LaptevVV, Вы писали:

LVV>А ты можешь книжки писать.

LVV>Или преподавать.

Да я вообще педагог от Бога. Шмж не даст соврать

LVV>Поэтому 33 года уже почти и преподаю...


Это круто, реально целая эпоха.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 06.04.2026 9:16 rg45 . Предыдущая версия .
Re[4]: Тема деструкторы
От: LaptevVV Россия  
Дата: 06.04.26 09:21
Оценка:
LVV>>Поэтому 33 года уже почти и преподаю...
R>Это круто, реально целая эпоха.
При том, что я начал только в 40 лет.
Пока программером работал — нифига своих сотрудников научить не мог...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Тема деструкторы
От: rg45 СССР  
Дата: 06.04.26 09:39
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Поэтому 33 года уже почти и преподаю...

R>>Это круто, реально целая эпоха.
LVV>При том, что я начал только в 40 лет.
LVV>Пока программером работал — нифига своих сотрудников научить не мог...

Т.е. сейчас тебе 73, так получается? И до сих пор преподаёшь. Ну это уже на грани подвига.

У меня брат 57-го года рождения — доцент, кфмн. Тоже преподавал, но уже несколько лет, как на пенсию ушёл.
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.