有没有一种简单的方法来初始化 C++ 中的动态数组数据成员?
Is there a simple way to initialize a data member that is a dynamic array in C++?
如下,字符串指针使用语法Line(string arg): foo{new string(arg)} {}
初始化,但动态数组不行,使用Line(int* arg): p_matrix{new int[3](arg)} {}
失败(暂且不提五法则)
如何初始化本身是 class
的数据成员的动态数组
#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。虽然我不太熟悉这个,所以也许其他人可以解释一下。
如下,字符串指针使用语法Line(string arg): foo{new string(arg)} {}
初始化,但动态数组不行,使用Line(int* arg): p_matrix{new int[3](arg)} {}
失败(暂且不提五法则)
如何初始化本身是 class
的数据成员的动态数组#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。虽然我不太熟悉这个,所以也许其他人可以解释一下。