是否有一种简单的方法来初始化c++中的动态数组数据成员?

Is there a simple way to initialize a data member that is a dynamic array in C++?

本文关键字:c++ 初始化 动态 数组 数据成员 方法 一种 是否 简单      更新时间:2023-10-16

如下所示,字符串指针是用语法Line(string arg): foo{new string(arg)} {}初始化的,但对于动态数组不是这样,它不能使用Line(int* arg): p_matrix{new int[3](arg)} {}(让我们暂时忘记5的规则)

如何初始化一个动态数组,而该数组本身又是类的数据成员

#include <iostream>
#include <string>
using namespace std;
class Line
{
    public:
        string* foo;
        Line(string arg): foo{new string(arg)} {}
        int* p_matrix;
        Line(int* arg): p_matrix{new int[3](arg)} {}
};
int main( )
{
    Line line {"bar"};
    cout << *(line.foo);
    int matrix[3] = {1,2,3};
    Line line2 {matrix};
    cout << line2.p_matrix[0];
    return 0;
}

问题是这一行:

Line(int* arg): p_matrix{new int[3](arg)} {}

正在尝试将int*分配给int

可以这样初始化数组:

Line(int* arg)
: p_matrix{new int[3]()} 
{
   for(int i = 0; i < 3; ++i)
   {
      p_matrix[i] = arg[i];
   }
}

这不是很安全。

如果你想在初始化列表中初始化它,我怀疑你可以使用lambas。我对这个不太熟悉,也许其他人可以解释一下。