指向结构元素的共享指针数组,什么样的语法?
Array of shared pointers that point to struct elements, what kind of a syntax?
我需要一个大小为 n 的数组,它具有共享指针并且每个指针都指向一个结构元素。语法是什么?
难道只是
shared_ptr<Struct_name> array(new Struct_name(n));
还是别的?
我应该使用 C++ 数组(#include 数组)而不是 C 数组吗?
当不再需要数组时释放内存怎么样?智能指针是否也为数组处理它,或者我是否必须通过
删除每个数组元素
delete array[i]
这是您所要求的相对简单的版本:
struct S {};
std::array<std::shared_ptr<S>, N> arr;
std::generate(arr.begin(), arr.end(), []() { return std::make_shared<S>(); });
如果 N
不是常量,那么我可能只建议使用 std::vector<T>
。
struct S {};
std::vector<std::shared_ptr<S>> vec(n);
std::generate(vec.begin(), vec.end(), []() { return std::make_shared<S>(); });
最后,智能指针的全部意义在于让对象自动删除后备内存。所以一般来说,你不需要显式删除由智能指针管理的内存。
我需要一个大小为 n 的数组,它具有共享指针并且每个指针都指向一个结构元素。语法是什么?
难道只是
shared_ptr<Struct_name> array(new Struct_name(n));
还是别的?
我应该使用 C++ 数组(#include 数组)而不是 C 数组吗?
当不再需要数组时释放内存怎么样?智能指针是否也为数组处理它,或者我是否必须通过
删除每个数组元素delete array[i]
这是您所要求的相对简单的版本:
struct S {};
std::array<std::shared_ptr<S>, N> arr;
std::generate(arr.begin(), arr.end(), []() { return std::make_shared<S>(); });
如果 N
不是常量,那么我可能只建议使用 std::vector<T>
。
struct S {};
std::vector<std::shared_ptr<S>> vec(n);
std::generate(vec.begin(), vec.end(), []() { return std::make_shared<S>(); });
最后,智能指针的全部意义在于让对象自动删除后备内存。所以一般来说,你不需要显式删除由智能指针管理的内存。