为什么c++在创建数组时不允许' new '调用构造函数?
Why does C++ not allow `new` to call constructor when creating arrays
假设您正在堆上创建一个对象数组,如下所示:
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
相关文章:
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 双指针在使用 new 时不调用对象构造函数
- 编译器是否在由 new 初始化的对象上调用隐式析构函数
- "new"运算符是否总是调用构造函数?
- 重载运算符 new(),为什么构造函数被调用两次?
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 有没有办法让shared_ptr.reset(new obj)首先调用析构函数?
- 调用隔离后访问冲突执行位置0x0000000000000000:New()
- 无法调用使用 malloc/placement new 创建的类上的虚函数
- 显式调用"运算符 new"后无法访问对象的函数
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- 如何使用new()在嵌套类中调用方法
- 在不同的编译器版本中调用new[]和delete[]
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 如何保护 mmap() 分配的内存空间不被'new'调用分配?
- 重载New调用自动构造对象
- 为什么c++在创建数组时不允许' new '调用构造函数?
- 为什么为重载运算符new调用类构造函数
- 我可以在c++中使用new调用函数吗
- 在c++中重载全局new()调用之前未初始化全局静态变量