我在新运营商面前看到*
运算符的使用情况。它做了什么?
int x= *(new int);
答案 0 :(得分:4)
new int
正在分配内存。
通过使用延迟运算符*,您将获得存储在该存储器位置的值,这将是垃圾。
#include <iostream>
void main()
{
int x = *(new int);
std::cout << x;
system("pause");
}
但这会导致内存泄漏。
答案 1 :(得分:1)
表达式new int
在已分配的内存中创建类型为int
的对象,并返回指向该对象的指针。由于未指定初始化程序,因此该对象是默认初始化,因此具有不确定值。
表达式int x = *(new int)
使用x
返回的指针引用的对象的值初始化new int
。但是,以这种方式访问不确定的值是未定义的行为。由于标准对包含未定义行为的程序的行为没有任何要求,因此任何包含表达式int x = *(new int)
的程序在理论上都可以完成任何。
如果您要初始化new
表达式创建的对象(例如new int()
),则x
将具有您初始化原始对象的任何值。但是,由于您没有将指针存储到原始对象,因此无法使用delete
销毁对象,因此您有内存泄漏。