C++;11具有动态分配阵列的包装器,如Boost';s作用域_数组? 我经常需要处理C++中动态分配的数组,因此依赖于SoopEdjStar、SydDyLaar等的Boost。在通读和之后,我找不到合适的替代品来替代C++11标准提供的这些动态数组包装器。有什么是我忽略了的,还是我必须继续依赖Boost?

C++;11具有动态分配阵列的包装器,如Boost';s作用域_数组? 我经常需要处理C++中动态分配的数组,因此依赖于SoopEdjStar、SydDyLaar等的Boost。在通读和之后,我找不到合适的替代品来替代C++11标准提供的这些动态数组包装器。有什么是我忽略了的,还是我必须继续依赖Boost?,c++11,memory-management,boost,wrapper,smart-pointers,C++11,Memory Management,Boost,Wrapper,Smart Pointers,有一个专门的unique\u ptr,比如unique\u ptr 如果您想使用shared\u ptr,您应该为deleter使用std::default\u delete,因为它没有像shared\u ptr这样的工具 std::shared_ptr数组(新测试[3],std::default_delete()); 就向量用作数组包装器而言,如果使用任何合适的智能指针将向量作为内部对象会怎么样?如果元素类型不可复制构造,则向量::emplace_back()和向量::push_back()

有一个专门的
unique\u ptr
,比如
unique\u ptr


如果您想使用
shared\u ptr
,您应该为deleter使用
std::default\u delete
,因为它没有像
shared\u ptr
这样的工具

std::shared_ptr数组(新测试[3],std::default_delete());

就向量用作数组包装器而言,如果使用任何合适的智能指针将向量作为内部对象会怎么样?

如果元素类型不可复制构造,则向量::emplace_back()和向量::push_back()将不起作用。我不知道如何使用初始值设定项列表进行初始化,但我怀疑这也有同样的问题。是的,你是对的,在这种情况下,我们需要用额外的包装器来包装这些不可复制的东西,这确实有点过头了:)这种专门化还提供了
t&operator[](size\u 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
std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());