c++11 - C++11 是否有像 Boost 的scoped_array 这样的动态分配数组的包装器?

标签 c++11 memory-management boost wrapper smart-pointers

我经常需要在 C++ 中处理动态分配的数组,因此依赖 Boost 来处理scoped_array、shared_array 等。读完Stroustrup's C++11 FAQ后和 C++11 Reference Wiki ,我找不到 C++11 标准提供的这些动态数组包装器的合适替代品。是否有什么我忽略了,或者我必须继续依赖 Boost?

最佳答案

有一个专门化unique_ptr ,例如unique_ptr<T[]> .

#include <iostream>
#include <memory>

struct test
{
  ~test() { std::cout << "test::dtor" << std::endl; }
};

int main()
{
  std::unique_ptr<test[]> array(new test[3]);
}

当您运行它时,您将收到此消息。

test::dtor
test::dtor
test::dtor
<小时/>

如果您想使用shared_ptr ,你应该使用std::default_delete<T[]>对于删除器,因为它没有像 shared_ptr<t[]> 这样的.

std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());

关于c++11 - C++11 是否有像 Boost 的scoped_array 这样的动态分配数组的包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8624146/

相关文章:

c++ - 编译器不会使用 -std=c++11 编译智能指针

ios - AIR 模块 + iOS

objective-c - 在实现中使用 __weak 修改参数的存储

c++ - boost::chrono 可读持续时间

c++ - 哪些右值有名字?

c++ - 从组件构造字符串的最佳方法,iostream 样式

c++ - 如何专门化基于 bool 元函数的类模板?

c# - 一个对象及其依赖项使用的内存

c++ - 是否有一个 bitset 类在实例化时调整大小,但避免了 boost::dynamic_bitset<> 的额外分配调用?

c++ - async_connect 在 boost::asio 中阻塞 io_service::run_one()