我正在开发一个使用 boost::shared_array 的 C++14 代码库。如果我理解正确的话,
scoped_array
和 shared_array
是 new[]
分配的 scoped_ptr
和 shared_ptr
的等价物,它们本身大多因 std::unique_ptr
和 std::shared_ptr
的可用性而被弃用。
那么,我可以用
std::shared_ptr<T[]>
代替 boost::shared_array<T>
吗?
使用 C++14:不,你不能。
在 C++17 之前,
std::shared_ptr
不适用于数组。但是 - 如果您提供自定义删除器,它确实有效;所以你可以定义:
template <typename T>
std::shared_ptr<T> make_shared_array(std::size_t n)
{
return std::shared_ptr<T> { new T[n], std::default_delete<T[]>{} };
}
which works(尽管如果共享指针构造函数失败,则可能存在潜在的泄漏)。
使用 C++17:是的,可以。
你似乎可以安全地定义:
template <typename T>
using shared_array = std::shared_ptr<T[]>;
相关问题: