想知道如果我写下以下内容并运行程序会发生什么。
new int[5]; // without assigning it to a pointer.
汇编已通过。
但是会分配5 * sizeof(int)
块内存吗?
如果是对象怎么办?
new some_obj_[5]; // without assigning it to a pointer.
是否会调用some_obj_
的构造函数?
答案 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页面