想问如果我写下面的代码并运行程序会发生什么。
new int[5]; // without assigning it to a pointer.
编译通过。
但是会5 * sizeof(int)
分配一大块内存吗?
如果它是一个对象呢?
new some_obj_[5]; // without assigning it to a pointer.
的构造函数会some_obj_
被调用吗?
想问如果我写下面的代码并运行程序会发生什么。
new int[5]; // without assigning it to a pointer.
编译通过。
但是会5 * sizeof(int)
分配一大块内存吗?
如果它是一个对象呢?
new some_obj_[5]; // without assigning it to a pointer.
的构造函数会some_obj_
被调用吗?
new int[5];//without assigning it to a pointer.
是的,将5*sizeof(int)
分配一块内存,但您无法访问,因为您没有保存指针。您将有内存泄漏。
new some_obj_[5];//without assigning it to a pointer.
是的,将5*sizeof(some_obj_)
分配大量内存但您无法访问,因为您没有保存指针。的默认构造函数some_obj_
将被调用 5 次。这应该很容易验证。根据some_obj_
编码方式,您可能会发生内存泄漏。
是的,对象数组将被动态分配,在第二种情况下,some_obj_
将调用默认构造函数。由于您不存储指针,因此您失去了访问对象或delete[]
数组的任何方式,因此存在内存泄漏。
new int[5];//without assigning it to a pointer.
但是会分配 5-sizeof(int) 的内存块吗?
YES , 5-sizeof(int) 分配的内存块和 5 个 int 未初始化为 0
如果它是一个对象呢?
new some_obj_[5];//without assigning it to a pointer.
Will the constructor of 'some_obj_' be invoked?
是的,sizeof(some_obj_) * 5
将分配内存块,并且 some_obj_ 的默认构造函数将被调用 5 次以初始化每个元素。
您正在泄漏这些内存,因为您没有指向它们的指针,您不能不调用delete []
以释放内存块。
参见新的 [] wiki 页面