нет
перегруженные деструкторы
malloc вошел в список функций, которые неявно создают объекты. если конструктору твоего объекта ничего не нужно делать (trivially constructible), то malloc создаст объект при выделении памяти
Если привести выделенную им память? То есть конструирует на самом деле каст?
«конструирует» идет не иначе чем в кавычках, потому что это все про типы, конструкторы которых ничего не делают. так-то это изменение по сути закрепляет сложившуюся практику, поэтому сюрпризов быть не должно, по идее если вкратце, то чтобы создать объект, нужно выделить память и вызвать конструктор. с первым malloc справлялся всегда, но до 20 стандарта еще требовался placement new, который бы вызвал конструктор. с 20 стандарта это не требуется для типов с тривиальными конструкторами, что довольно логично
То есть если просто написать T* obj = malloc(sizeof(T)) это сработает?
да, если T удовлетворяет требованиям trivially constructible. то есть с интом норм, а с каким-нибудь вектором — нет
Это всегда выделяло память под T, но объект может требовать более сложной инициализации, если например владеет указателем
Спасибо, всё понятно
Тереть можно определять 100500 деструкторов на класс? Prospective кажется так называется.
https://youtu.be/A3_xrqr5Kdw
Вот бы он в названии написал, что не multiple destructors, а conditional destructor
Обсуждают сегодня