本標準規定的std::unique_ptr
一個模板特其正確地調用其析構函數中delete[]
:爲什麼沒有std :: shared_ptr <T[]>專業化?
void func()
{
std::unique_ptr<int[]> arr(new int[10]);
.......
}
隨着std::shared_ptr
這種專業化是不可用的,所以有必要 提供有刪除其正確調用delete[]
:
void func()
{
// Usage
shared_ptr array (new double [256], [](double* arr) { delete [] arr; });
..............
}
這是簡單的疏忽嗎? (就像std::copy_if
一樣)或者是有原因的?
N.B.有一個新的提議將C++ 17添加爲基於Boost的工作,請參閱http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3640.html –
請注意,很多在處理數組時,應該禁用'shared_ptr'機制,例如引用子對象的能力。 –