让我们假设您正在堆上创建一个目标数组,如下所示:
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);
...
答案 0 :(得分:15)
为什么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)};
}
答案 1 :(得分:-2)
通常,您不希望多次构造同一个对象,因此您构建了许多默认对象,并使用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
这样,您可以动态地分配指向可以单独构建的对象的指针。