C ++ 11是否具有动态分配数组的包装器,如Boost的scoped_array?

时间:2011-12-24 11:08:03

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

我经常需要在C ++中处理动态分配的数组,因此依赖于Boost for scoped_array,shared_array等。通过Stroustrup's C++11 FAQC++11 Reference Wiki阅读后,我无法找到C ++ 11标准提供的这些动态数组包装器的合适替代品。有什么东西我忽略了,还是我必须继续依赖Boost?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:47)

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[]>());

答案 1 :(得分:0)

到目前为止,向量是作为数组包装器,如果你使用任何合适的智能指针作为内部对象,该怎么办?