首页 > 解决方案 > 在 C++ 中为 double 类型的数组创建一个 unique_ptr

问题描述

我正在为包含以下内容的类编写构造函数:

// my_class.hpp
private:
    std::unique_ptr<double[]> my_list;

我在尝试初始化my_list时遇到了一些问题

my_class::my_class(const int new_size, const double new_values){
    // creating an array with new_values as initial value.
    auto size = static_cast<const size_t>(new_size);
    my_list = std::make_unique<double[]>(size);          // <-- Error
    for (size_t i = 0; i < size; i++){
        my_list[i] = new_values;
    }
}

错误消息:“不要声明 C 样式数组,使用 std::array<> 代替 [modernize-avoid-c-arrays,-warnings-as-errors]”

我尝试了以下方法:

    my_list = std::make_unique<std::array<double>>(size);    // <-- Error
    // Error Message: "too few template arguments for class template 'array' [clang-diagnostic-error]"

    my_list = std::make_unique<std::array<double,size>>(size);    // <-- Error
    // Error Message: "non-type template argument is not a constant expression [clang-diagnostic-error]"

我该如何解决这个问题,还有什么方法可以在不遍历每个元素的情况下初始化这样的数组?

标签: c++arraysunique-ptr

解决方案


我该如何解决这个问题

切换std::unique_ptr<double[]>std::vector<double>

有没有办法在不遍历每个元素的情况下初始化这样的数组?

my_class::my_class(std::size_t new_size, double new_values) 
: my_list(new_size, new_values) 
{}

推荐阅读