You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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初始化(更安全)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:45:24