使用 boost::make_shared 分配字符* 数组



要分配一个char*数组,我通常会写这样的东西:

char* arr = new char[size];

如何使用 boost::shared_ptr(或者可能是 boost::shared_array)和 boost::make_shared 来实现同样的事情?

我的猜测是:

1) boost::shared_ptr<char[]> arr = boost::make_shared<char[]>(size);
2) boost::shared_ptr<char> arr = boost::make_shared<char>(size);
3) boost::shared_ptr<char> arr = boost::shared_ptr<char>(new char[size]);

最后一个看起来是正确的,但是否可以保证在销毁后将调用删除 [] arr?

正确的是 make_shared<T[]>(n) .

请记住,在

c++20 之前,它是一个扩展,标准库中不存在(尽管unique_ptr<T[]>标准的一部分)。

Boost的shared_ptr确实会调用正确的删除器(天真地, delete[])为它。

提升shared_ptr和make_shared

Boost 支持使用 shared_ptrmake_shared 进行阵列分配和处理。根据boost的文档:

从 Boost 版本 1.53 开始,shared_ptr可用于保存指向动态分配数组的指针。这是通过使用数组类型(T[] 或 T[N])作为模板参数来实现的。使用未调整大小的数组 T[] 和大小数组 T[N] 之间几乎没有区别;后者仅允许 operator[] 对索引执行范围检查。

只需使用:

shared_ptr<char[]> arr(new char[size]);
-- OR --
shared_ptr<char[]> arr = make_shared<char[]>(size);

标准库

根据 cppreference.com,标准shared_ptrmake_sharedallocate_shared增加了对从C++20开始的数组的支持。

相关内容

  • 没有找到相关文章

最新更新