0

I am trying to switch my code to use make_shared<type>() but I have a lot of incomplete types (complete at the time of creation) and was wondering if there is anyway make_shared would work with incomplete types or allow me to pass a deleter type.

I looked around and didn't find any posts related to this so either this just works ?? or I am overlooking something basic.

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

Above is the macro I use to create new objects. Would like to convert this to

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

EDIT: Just to clarify I wanted to ask if I could pass a deleter type to the shared_ptr created with make_shared

4

1 に答える 1

3

いいえ、作成make_sharedした削除オブジェクトを渡すことはできませんshared_ptr。そして、一般的に、あなたはそうする必要はないでしょう。ポインタの作成にはnew(特に配置new)を使用するため、デストラクタを呼び出して削除する必要があります。make_sharedしたがって、メモリを直接管理するため、できることはあまりありません。

于 2012-06-03T20:48:04.110 に答える