C++用法:" *(new int); "做什么?

  • 本文关键字:new 用法 C++ int c++
  • 更新时间 :
  • 英文 :


我在新运算符前面看到了*运算符的用法。它有什么作用?

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销毁对象,因此存在内存泄漏

最新更新