【发布时间】:2014-06-10 20:50:23
【问题描述】:
假设您正在堆上创建一个对象数组,如下所示:
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);
...
【问题讨论】:
-
-1用于原始指针,new在一行代码中。这个问题也不是特别合理,考虑到它不仅使用原始指针、衰减和无用的分配,而且还关注基本上没有实际意义的原始 C 数组创建。 IOW 的答案可能是“因为不使用 C 数组”(以及所有上述内容)。 -
FWIW,可以通过
std::vector来做到这一点,例如std::vector<myClass> foo(10,myClass(12)); -
为什么这个问题得到了这么多的支持?同情?你们知道你不应该反对其他选票,不是吗?它也允许构造函数调用,所以这个问题是基于一个错误的前提开始的。
-
@RaphaelMiedl 我赞成因为“有效的问题”。如果它被标记为 C++03 会更有趣。我们可以写
new int[5](),那为什么不写new int[5](42)? -
@jrok 这正是我对这个问题的一个问题。询问为什么的问题通常不能很好地回答。您可以看到,也没有一个答案真正关注“为什么”部分。
标签: c++ arrays constructor new-operator