如何在C++中将shared_ptr初始化为int数组并赋值0到10
要让std::shared_ptr<int[]> variable存储0到10的整数,且索引对应值,你可以用以下几种方式实现:
方法一:手动分配内存并循环赋值
在类的构造函数中完成初始化,先分配能容纳11个整数的数组,再通过循环为每个索引位置赋对应的值:
#include <memory> class YourClass { public: YourClass() : variable(new int[11]) { for (int i = 0; i <= 10; ++i) { variable[i] = i; } } private: std::shared_ptr<int[]> variable; };
C++20开始支持std::make_shared直接创建数组类型的智能指针,搭配循环或标准算法填充值:
#include <memory> #include <algorithm> class YourClass { public: YourClass() : variable(std::make_shared<int[]>(11)) { // 方式1:循环赋值 for (int i = 0; i <= 10; ++i) { variable[i] = i; } // 方式2:用std::generate简化赋值逻辑 int idx = 0; std::generate(&variable[0], &variable[11], [&idx]() { return idx++; }); } private: std::shared_ptr<int[]> variable; };
类内直接初始化(无需构造函数)
如果不需要在构造函数做额外逻辑,也可以用lambda表达式在类内直接完成初始化:
#include <memory> class YourClass { private: std::shared_ptr<int[]> variable = []() { auto arr_ptr = std::make_shared<int[]>(11); for (int i = 0; i <= 10; ++i) { arr_ptr[i] = i; } return arr_ptr; }(); };
关键注意点
- 数组大小必须设为11,才能容纳0到10共11个整数,避免索引越界
std::shared_ptr<int[]>会自动处理数组的内存释放,无需手动调用delete[],杜绝内存泄漏
内容的提问来源于stack exchange,提问作者MIA
相关产品推荐
相关产品推荐

