2013-04-30 4 views
2

숯불 포인터에 고유 한 포인터를 사용하고 싶습니다. 어떤 경우에 deleter 함수가 unique_ptr에 전달되어야 하는지를 알아야합니다.숯불 포인터에 대한 Deleter 함수

std::unique_ptr<char[]> pChar(new char [size]) 

그리고,

std::unique_ptr<char*> pChar(new char [size]) 

내가 문자에 대해 [], 컴파일러는 [],하지만 문자에 대해 삭제 부를 것이다 * 추측?

감사

답변

2

char[] 컴파일러를 들어 그 사실 delete를 호출 std::default_delete<char*>을 선택 실제로 delete[]를 호출하는 것으로, std::default_delete<char[]>을 선택 char* 컴파일러.

그러나 T의 경우 T*이므로 td::unique_ptr<char*>을 초기화 할 수 없습니다.

는이 같은 것을 사용할 수 있습니다,하지만 난 smart_pointer 포인터로, 그것은 표준 : default_delete , 어떻게 삭제해야하는 어떤 크기까지 알고 컴파일러 할 경우

char* pp = new char[1]; 
    auto deleter = [](char** p) { delete[] *p; }; 
    std::unique_ptr<char*, decltype(deleter)> p(&pp, deleter); 
+0

아주 이상한 생각합니다. 그것은 자유와 똑같이 행동 할 것입니다, 그렇죠? – Yogi

+0

Deleter를 제공하는 대신 배열 전문화를 사용하지 않는 이유는 무엇입니까? –