如果使用'new'来实例化一个对象而不将其赋值给变量会发生什么?

时间:2013-01-30 22:15:35

标签: c++ new-operator

想知道如果我写下以下内容并运行程序会发生什么。

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

汇编已通过。

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

如果是对象怎么办?

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

是否会调用some_obj_的构造函数?

3 个答案:

答案 0 :(得分: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次。这应该是微不足道的验证。根据{{​​1}}的编码方式,您可能会发生内存泄漏。

答案 1 :(得分:3)

是的,将动态分配对象数组,在第二种情况下,将调用some_obj_的默认构造函数。由于您没有存储指针,因此您无法访问对象或delete[]数组,因此您有内存泄漏。

答案 2 :(得分:1)

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

但是会分配5个sizeof(int)的内存块吗?

,分配的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 []来释放内存块。

请参阅new [] Wiki页面