Arrays 指向结构元素的共享指针数组,什么样的语法?

Arrays 指向结构元素的共享指针数组,什么样的语法?,arrays,c++11,struct,smart-pointers,Arrays,C++11,Struct,Smart Pointers,我需要一个大小为n的数组,它有共享指针,每个指针指向一个struct元素。语法是什么 只是 shared_ptr<Struct_name> array(new Struct_name(n)); 以下是你所要求的相对简单的版本: struct S {}; std::array<std::shared_ptr<S>, N> arr; std::generate(arr.begin(), arr.end(), []() { return std::make_sha

我需要一个大小为n的数组,它有共享指针,每个指针指向一个struct元素。语法是什么

只是

shared_ptr<Struct_name> array(new Struct_name(n));

以下是你所要求的相对简单的版本:

struct S {};
std::array<std::shared_ptr<S>, N> arr;
std::generate(arr.begin(), arr.end(), []() { return std::make_shared<S>(); });

最后,智能指针后面的整个要点是允许对象自动删除备份内存。因此,一般来说,不需要显式删除由智能指针管理的内存。

是否希望对象共享一个生命周期?数组的大小是在编译时还是在运行时确定的?谁拥有指向数组的指针(相对于元素),他们可以对其做什么?客户端如何请求数组元素?感谢您的回答!为什么需要
std::generate
?是否可以用例如
arr=std::make_shared(N)
?Masza:不,不能。主要原因是您建议的行无法编译
std::make_shared
具有类型
shared_ptr
,而
arr
具有类型
std::array
。确定。之后数组元素有什么类型的值?是
nullptr
还是别的什么?@Masza:在调用
std::generate
之前,
arr
的所有元素都包含指向
nullptr
的有效
shared\ptr
。在调用
generate
之后,它们都指向一个唯一的有效内存。@Masza:基本上,在调用
generate
之前,我们在每个共享内存上都使用了默认构造函数。默认构造函数表示托管指针最初指向
nullptr
。然后,我们与
std::generate
一起使用的lambda将为数组中的每个条目提供一个唯一的共享ptr。
struct S {};
std::array<std::shared_ptr<S>, N> arr;
std::generate(arr.begin(), arr.end(), []() { return std::make_shared<S>(); });
struct S {};
std::vector<std::shared_ptr<S>> vec(n);
std::generate(vec.begin(), vec.end(), []() { return std::make_shared<S>(); });