2012-06-03 6 views
0

make_shared<type>()을 사용하기 위해 코드를 전환하려고하는데 불완전한 유형 (작성 시점에 완료 됨)이 많으며 불완전한 유형으로 작동하거나 또는 허용할만한 make_shared가 있는지 궁금합니다. 삭제 기 유형을 전달하십시오.불완전 유형으로 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>()) 

편집 : 그냥 내가 make_shared

+1

"make_shared로 만든 shared_ptr에 Deleter 유형을 전달할 수 있는지 물어보고 싶었습니다."실제로 그 *와 관련이없는 불완전한 유형에 대해 실제로 말하면서 * 그 *에 대해 묻는 것으로 그 질문을 명확히 할 수 있습니까? 할려고? 질문을 다시 말하십시오. –

답변

3

없음으로 만든 shared_ptr에 Deleter가 유형을 전달할 수 있는지 물어보고 싶은게 명확히하기 위해, make_shared는에 Deleter가 객체를 전달할 수 없습니다 shared_ptr가 생성됩니다. 그리고 일반적으로, 당신은 필요가 없을 것입니다. 포인터를 만들기 위해 new (구체적으로는 배치 new)을 사용하기 때문에 소멸자를 호출하여 삭제해야합니다. make_shared은 메모리를 직접 관리하기 때문에 할 수있는 일이별로 없습니다.

+0

유형은 작성시 즉 new 또는 make_shared가 호출 될 때 완료됩니다. – Sharad

+2

@Sharad : 그러면 컴파일러에서 어떤 오류가 발생합니까? 그리고'make_shared'의 이러한 용도는 어디에 있습니까? –

+0

미안하지만 나는 내 질문에 요점을 놓쳤다. 새로 생성 된 shared_ptr에 삭제기를 전달할 수 있는지 궁금합니다. – Sharad

관련 문제