2012-06-03 2 views
0

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

EDIT: Просто для уточнения я хотел бы спросить, если я мог бы передать тип DeleteR к shared_ptr созданный с make_shared

+1

«Я хотел спросить, могу ли я передать тип делетера в shared_ptr, созданный с помощью make_shared». Не могли бы вы уточнить этот вопрос, фактически спросив об этом *, вместо того, чтобы говорить в основном о неполных типах, которые не имеют никакого отношения к тому, что вы пытаешься это сделать? Просто повторите свой вопрос. –

ответ

3

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

+0

Тип завершен во время создания, т. Е. Когда вызывается новый или make_shared. – Sharad

+2

@Sharad: Тогда какая ошибка вы получаете в компиляторе? И где эти виды использования 'make_shared'? –

+0

Извините, я догадываюсь, что пропустил точку в моем вопросе. Мне было интересно, смогу ли я передать удаляющемуся вновь создаваемому shared_ptr? – Sharad

Смежные вопросы