如果所述结构具有构造函数,则具有 new[] 的结构数组似乎不起作用
Array of structs with new[] doesn't seem to work if said struct have constructor
对于一个赋值,我有一个定义了构造函数的结构,并希望使用 new[] 运算符创建这些结构的数组。我不明白为什么这不起作用。代码是这样的(伪代码):
struct Structname
{
int x;
int y;
Structname(int a,int b)
{
x=a;
y=b;
}
}
现在正在尝试做:
Structname *Array = new Structname[size]
导致错误 "No function matching call Structname::Structname() on Structname[size]"(不是准确的引用)。当我的结构中没有构造函数时,不会发生错误,就像编译器希望我使用 Structname* Array = new Structname[size] 中的构造函数一样。我无法删除构造函数,因为我在代码的其他部分需要它。另外,由于分配规则,我不能使用 std::vector。
当您定义参数化构造函数时,编译器不会注入默认构造函数,即 Structname::Structname()
。这就是您出错的原因。
您可以通过两种方式通过它:
1) 定义自己的默认构造函数:
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname(): Structname(0, 0) { }
}
2) 使用default
关键字获取本应由编译器注入的构造函数。
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname() = default;
}
请注意,在选项 1 中,数据成员使用正确的值进行了初始化。在选项 2 中,数据成员不会被初始化为正确的值。
所以,根据需求做出选择。
建议:
虽然与问题无关,但它被认为是一种很好的做法。切勿使用 naked new。寻找其他选择。参见 std::vector
。
对于一个赋值,我有一个定义了构造函数的结构,并希望使用 new[] 运算符创建这些结构的数组。我不明白为什么这不起作用。代码是这样的(伪代码):
struct Structname
{
int x;
int y;
Structname(int a,int b)
{
x=a;
y=b;
}
}
现在正在尝试做:
Structname *Array = new Structname[size]
导致错误 "No function matching call Structname::Structname() on Structname[size]"(不是准确的引用)。当我的结构中没有构造函数时,不会发生错误,就像编译器希望我使用 Structname* Array = new Structname[size] 中的构造函数一样。我无法删除构造函数,因为我在代码的其他部分需要它。另外,由于分配规则,我不能使用 std::vector。
当您定义参数化构造函数时,编译器不会注入默认构造函数,即 Structname::Structname()
。这就是您出错的原因。
您可以通过两种方式通过它:
1) 定义自己的默认构造函数:
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname(): Structname(0, 0) { }
}
2) 使用default
关键字获取本应由编译器注入的构造函数。
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname() = default;
}
请注意,在选项 1 中,数据成员使用正确的值进行了初始化。在选项 2 中,数据成员不会被初始化为正确的值。
所以,根据需求做出选择。
建议:
虽然与问题无关,但它被认为是一种很好的做法。切勿使用 naked new。寻找其他选择。参见 std::vector
。