안전한가요?배열 포인터가있는 std :: unique_ptr
std::unique_ptr<A> ptr(new A[100]);
ptr
는 의지가 잘못 delete
포인터, 또는 delete[]
그것을라는 범위와 소멸자를 벗어나면?
안전한가요?배열 포인터가있는 std :: unique_ptr
std::unique_ptr<A> ptr(new A[100]);
ptr
는 의지가 잘못 delete
포인터, 또는 delete[]
그것을라는 범위와 소멸자를 벗어나면?
가 제대로 작동하려면 당신은 제대로 unique_ptr
이 유지 될 유형을 지정해야합니다 :
std::unique_ptr<A[]> ptr(new A[100]);
이 delete[]
대신 delete
사용하는 Deleter가 기본값으로 사용됩니다.
정확히 가리키는 유형을 A[]
으로 지정하면 배열 형식에 대해 unique_ptr
의 템플릿 전문화가 있으므로 정확히 delete[]
포인터가됩니다.
유형이 자동으로 유추 될 수있는 경우 여기에 잘못 갈 기회가 없었을 것입니다. 즉,이 같은 (std::make_pair
과 같은 맥락에서) 함수 호출을 할 수있는 포인터를 생산하는 표현, 필요 :
auto ptr = make_unique(new A[100]);
이 C++ 11에서 실종 유용한 유틸리티입니다,하지만 그것은되었습니다 C++ 14에 추가되었습니다.