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