а ты все перегрузил?
у меня вызывает
Да, если я делаю new A или std::shared_ptr<A>(new A), то используются перегруженные new и delete, а если std::make_shared<A>(), то используется ::new
Минимальный воспроизводимый пример*
::new ты же и перегружаешь
Да, сейчас сделаю
Я перегружаю new, а make_shared использует дефолтный ::nee
Какой ты перегружаешь?
Вот пример перегрузки new https://pastebin.com/agcjU8Dr
ну так да, шаред использует глобальную перегрузку
Ага это class specific
Чёта вы зарулили с этим не туда... Если в классе определены operator new / delete — они должны всеми использоваться, в том числе и смартпоинторами.
Но не make_shared
С чего ты это взял? Приведите ваши докозательства!
Ну так чтобы вызвать перегруженный ин класс оператор, он должен аллоцировать сам объект класс
Вообще, да, ты прав. Блок же выделяется НЕ ДЛЯ объекта класса....
https://pastebin.com/agcjU8Dr
Он зато потом должен вызвать перегруженный placement new класса, если он есть...
В теории наверное можно вызывать явно: void* ptr = X::operator new(sizeof(X) + 42); но что там потом с удалением делать хз
Обсуждают сегодня