如果所述结构具有构造函数,则具有 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