C ++用法:“*(new int);”是做什么的?

时间:2017-04-03 05:52:37

标签: c++

我在新运营商面前看到*运算符的使用情况。它做了什么?

int x= *(new int);

2 个答案:

答案 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销毁对象,因此您有内存泄漏