Здравствуйте, watchmaker, Вы писали:
W>Собственно, если хочется дальше вручную тут этим управлять, то нужно также самому вручную доставить до delete и аргумент align_val_t, который был передан в new при выделении.
покажи плиз как доставить, напиши конкретный код освобождения:
auto p = new(std::align_val_t(64)) std::string();
// что-то делаем с p
// delete p; <--- напиши свой вариант
если было введено плюсовое выделение (привет типам, конструкторам и деструкторам), то обязаны были задизайнить и парную функцию (оператор?)
вариант с вызовом "operator delete....." я видел в этой ветке, но это что-то непарное, ибо не плюсовое (освобождает только память?)
"выравнивание — свойство типа" — это в данном контексте нерелевантное заявление. новый оператор new тому подтверждение. он явно принимает и тип и правила выравнивания
Re[3]: C++17: new с выравниванием - как удалять по феншую?
U>если было введено плюсовое выделение (привет типам, конструкторам и деструкторам), то обязаны были задизайнить и парную функцию (оператор?) U>вариант с вызовом "operator delete....." я видел в этой ветке, но это что-то непарное, ибо не плюсовое (освобождает только память?)
Ты не прав. Никакого специального синтаксиса для new expression связанного с выравниванием не вводили. В данном случае то, что ты можешь использовать new expression с alignment — сайд-эффект функционала передачи параметров из new expression в operator new (которое раньше использовалось для placement new и, иногда, специальной тагированной аллокации)
U>"выравнивание — свойство типа" — это в данном контексте нерелевантное заявление. новый оператор new тому подтверждение. он явно принимает и тип и правила выравнивания
Нет. Следует различать new expression и operator new. Для new expression никаких специальных параметров выравнивания не вводили. Его просто обязали звать выровненный operator new если выравнивание типа превышает стандартное, и, как сайд-эффект, через уже существующий синтаксис можно звать выровненный operator new. А operator new — это сырой аллокатор, он ничего о типе не знает.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: C++17: new с выравниванием - как удалять по феншую?
V>Ты не прав. Никакого специального синтаксиса для new expression связанного с выравниванием не вводили.
эээ, я-то тут подумал что-то совсем новенькое
V>Для new expression никаких специальных параметров выравнивания не вводили. Его просто обязали звать выровненный operator new если выравнивание типа превышает стандартное, и, как сайд-эффект, через уже существующий синтаксис можно звать выровненный operator new. А operator new — это сырой аллокатор, он ничего о типе не знает.
ну то есть был некий старый кривой механизм и через него завели в стандарте дорожку для создания выровненных объектов?
а кривизну решили не выправлять?
Re[5]: C++17: new с выравниванием - как удалять по феншую?
U>ну то есть был некий старый кривой механизм и через него завели в стандарте дорожку для создания выровненных объектов? U>а кривизну решили не выправлять?
Если кривым механизмом ты называешь весь этот конандрум с new expression и перегружаемым оператором new, который существовал в С++ со времен CFront, то ты прав.
Но отношения к выравниванию это не имеет никакого.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: C++17: new с выравниванием - как удалять по феншую?
Здравствуйте, Vamp, Вы писали:
V>Если кривым механизмом ты называешь весь этот конандрум с new expression и перегружаемым оператором new, который существовал в С++ со времен CFront, то ты прав.
тем не менее исходный вопрос от ТС актуален, пусть даже с неудобствами, но код ведь можно написать. а то развели демагогию
повторю: покажите конкретный (и корректный) код освобождения объекта
Re[7]: C++17: new с выравниванием - как удалять по феншую?
Здравствуйте, uzhas, Вы писали:
V>>Если кривым механизмом ты называешь весь этот конандрум с new expression и перегружаемым оператором new, который существовал в С++ со времен CFront, то ты прав.
U>тем не менее исходный вопрос от ТС актуален, пусть даже с неудобствами, но код ведь можно написать. а то развели демагогию U>повторю: покажите конкретный (и корректный) код освобождения объекта
стандартным способом освобождения при использовании перегруженных операторов new и delete:
явный вызов деструктора + явный вызов перегруженного оператора удаления.
как-то так: