【发布时间】:2020-07-06 08:21:12
【问题描述】:
我正在为包含以下内容的类编写构造函数:
// 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]"
我该如何解决这个问题,还有什么方法可以在不循环遍历每个元素的情况下初始化这样的数组?
【问题讨论】:
-
一个 std::array 是一个固定大小的数组。你可能想要一个 std::vector。阅读这两个选项并自行决定。
-
当我们有
std::vector<T>时,我从未真正见过std::unique_ptr<T[]>的用例。如果需要所有权语义,那么std::unique_ptr<std::vector<T>>可能会更好(并且是指向容器的指针的一个很好的用例,这通常不常见)。 -
你在哪里声明
magnitudes? -
@Someprogrammerdude 当你的遗留代码给你一个你可以拥有的指针并且你想避免复制时,它会很有用。不过,我没有看到“从头开始”创建一个案例。
-
您的错误不是来自标准 c++ 并且可能不正确。看起来它希望您在代码中仅使用
vectors。
标签: c++ arrays unique-ptr