为什么c++在创建数组时不允许' new '调用构造函数?

Why does C++ not allow `new` to call constructor when creating arrays

本文关键字:new 调用 构造函数 不允许 c++ 创建 数组 为什么      更新时间:2023-10-16

假设您正在堆上创建一个对象数组,如下所示:

myClass * objectPtr = new myClass[10];

new只调用默认构造函数,并且(根据我的阅读)不允许调用任何其他构造函数。

为什么new不能调用任何其他构造函数背后有任何逻辑吗?这样做似乎更好,比如

myClass * objectPtr = new myClass[10](12);

相对
myClass * objectPtr = new myClass[10];
objectPtr[0] = myClass(12);
objectPtr[1] = myClass(12);
...

为什么c++不允许new调用构造函数创建数组

。只是有点乏味:

struct my_class
{
    my_class() {}
    my_class(int, int) {}   
};
int main() 
{
  my_class* objectPtr = new my_class[3]{my_class(1,2),
                                        my_class(), 
                                        my_class(3,4)};
}

通常您不会想要多次构造相同的对象,因此您构造了许多默认对象,并且使用for循环可以根据您的需要更改它们。

myClass **ObjectPointers = new myClass*[NUMBER_OF_OBJECTS];
for (int i=0; i<NUMBER_OF_OBJECTS; ++i)
    ObjectPointers[i] = new myClass(1,2,3,...); # <-- non-default constructor