Использование make_shared с неполными типами

Я пытаюсь переключить свой код для использования make_shared<type>() но у меня есть много незавершенных типов (завершенных во время создания), и мне было интересно, будет ли make_shared работать с неполными типами или разрешить мне передать тип-удалитель.

Я осмотрелся и не нашел ни одной записи, связанной с этим, так что либо это просто работает?? или я пропускаю что-то простое.

#define NEW_PARAMS(Type, ...)   ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_delete<Type>())

Выше макрос, который я использую для создания новых объектов. Хотел бы преобразовать это в

#define NEW_PARAMS(Type, ...)   ::std::make_shared<Type>(__VA_ARGS__, ::std::default_delete<Type>())

РЕДАКТИРОВАТЬ: просто чтобы уточнить, я хотел бы спросить, могу ли я передать тип удаления в shared_ptr создан с make_shared

1 ответ

Нет, make_shared не может передать объект удаления в shared_ptr это создает. И вообще, вам не нужно. Так как он использует new (размещение new в частности) чтобы создать указатель, его нужно будет удалить, вызвав деструктор. Так что вы мало что можете сделать, так как make_shared управляет памятью напрямую.

Другие вопросы по тегам