4

想问如果我写下面的代码并运行程序会发生什么。

new int[5]; // without assigning it to a pointer.

编译通过。

但是会5 * sizeof(int)分配一大块内存吗?

如果它是一个对象呢?

new some_obj_[5]; // without assigning it to a pointer.

的构造函数会some_obj_被调用吗?

4

3 回答 3

8
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_编码方式,您可能会发生内存泄漏。

于 2013-01-30T22:18:00.387 回答
3

是的,对象数组将被动态分配,在第二种情况下,some_obj_将调用默认构造函数。由于您不存储指针,因此您失去了访问对象或delete[]数组的任何方式,因此存在内存泄漏。

于 2013-01-30T22:17:43.167 回答
1
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 页面

于 2013-01-30T22:37:20.600 回答