Tiêu chuẩn cung cấp một mẫu chuyên môn của std::unique_ptr
đó một cách chính xác gọi là delete[]
từ destructor của nó:Tại sao không có chuyên môn :: shared_ptr <T[]>?
void func()
{
std::unique_ptr<int[]> arr(new int[10]);
.......
}
Với std::shared_ptr
chuyên môn hóa này không có sẵn, vì vậy nó là cần thiết để để cung cấp một deleter đó một cách chính xác gọi delete[]
:
void func()
{
// Usage
shared_ptr array (new double [256], [](double* arr) { delete [] arr; });
..............
}
Đây có phải chỉ là sự giám sát không? (giống như cách có một số std::copy_if
) hoặc có lý do gì không?
N.B. có đề xuất mới để thêm mục này cho C++ 17, dựa trên công việc trong Boost, xem http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3640.html –
Lưu ý rằng rất nhiều của máy chủ 'shared_ptr' sẽ bị vô hiệu hóa khi làm việc với các mảng, chẳng hạn như khả năng tham chiếu đến một subobject. –