我可以安全地将 boost::shared_array<T> 替换为 std::shared_ptr<T[]> 吗?

问题描述 投票:0回答:1

我正在开发一个使用 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>
吗?

boost c++14 shared-ptr
1个回答
2
投票

使用 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[]>;

相关问题:

© www.soinside.com 2019 - 2024. All rights reserved.