2013-04-30 57 views
2

我想在字符指針上使用唯一的指針。我需要知道在哪些情況下需要將deleter函數傳遞給unique_ptr。字符指針的刪除函數

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

而且,

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

我想對於char [],編譯器會調用delete [],但對於字符*?

感謝

回答

2

對於char[]編譯器選擇std::default_delete<char[]>,實際調用delete[],爲char*編譯器選擇std::default_delete<char*>,實際調用delete

但是,你不能初始化td::unique_ptr<char*>,當你嘗試,因爲對於Tstd::unique_ptr<T>::pointer簡直是T*

您可以使用這樣的事情,但我認爲smart_pointer到指針,這是非常奇怪的

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

在的std :: default_delete ,怎麼會知道編譯直到它需要刪除的內容大小的情況下。它的行爲和免費一樣,對吧? – Yogi 2013-04-30 09:09:03

+0

爲什麼不使用數組專業化而不是提供刪除器? – 2013-04-30 09:12:11