C++ C++;用法:什么是*(新int)&引用;做

C++ C++;用法:什么是*(新int)&引用;做,c++,C++,我在新操作符前面看到了*操作符的用法。它有什么作用 int x= *(new int); 正在分配内存 通过使用defering操作符*可以获得内存位置上的值,该值将是垃圾 #include <iostream> void main() { int x = *(new int); std::cout << x; system("pause"); } #包括 void main() { 整数x=*(新整数); 标准::cout 正在分配内存 通

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

int x= *(new int);
正在分配内存

通过使用defering操作符*可以获得内存位置上的值,该值将是垃圾

#include <iostream>

void main()
{
    int x = *(new int);
    std::cout << x;
    system("pause");
}
#包括
void main()
{
整数x=*(新整数);
标准::cout
正在分配内存

通过使用defering操作符*可以获得内存位置上的值,该值将是垃圾

#include <iostream>

void main()
{
    int x = *(new int);
    std::cout << x;
    system("pause");
}
#包括
void main()
{
整数x=*(新整数);

std::cout表达式
new int
在分配的内存中创建类型为
int
的对象,并返回指向所述对象的指针。由于未指定初始值设定项,该对象默认初始化,因此具有不确定值

表达式
intx=*(新的int)
使用
new int
返回的指针所引用的对象值初始化
x
。但是,以这种方式访问不确定值是未定义的行为。由于标准对包含未定义行为的程序的行为没有要求,因此任何包含表达式
int x的程序=*(新int)
理论上可以做任何事情


如果要初始化由
new
表达式创建的对象(例如
newint()
),则
x
将具有初始化原始对象时使用的任何值。但是,由于没有存储指向原始对象的指针,因此无法使用
delete
销毁对象,因此存在内存泄漏。

表达式
new int
在分配的m中创建类型为
int
的对象并返回指向所述对象的指针。由于未指定初始值设定项,该对象默认已初始化,因此具有不确定值

表达式
intx=*(新的int)
使用
new int
返回的指针所引用的对象值初始化
x
。但是,以这种方式访问不确定值是未定义的行为。由于标准对包含未定义行为的程序的行为没有要求,因此任何包含表达式
int x的程序=*(新int)
理论上可以做任何事情



如果要初始化由
new
表达式创建的对象(例如
newint()
),则
x
将具有初始化原始对象时使用的任何值。但是,由于未存储指向原始对象的指针,因此无法使用
delete
销毁该对象,因此存在内存泄漏。

它泄漏内存。不要这样做。读取未初始化对象也会导致未定义的行为int@M.M除非我们知道以后如何使用
x
,否则它更像是一个垃圾值;)我希望这是在一个标题为“您不应该做的事情”的部分中。@CinCout代码从
new int
分配的未初始化内存中读取,为了初始化x,导致UB,它会泄漏内存。不要这样做。读入也会导致未定义的行为未初始化的int@M.M除非我们知道以后如何使用
x
,否则它更像是一个垃圾值;)我希望这是在一个标题为“你不应该做的事情”的部分中。@CinCout代码从
new int
分配的未初始化内存中读取,以便初始化x,从而导致UB,@juanchopanza:更新了答案。@juanchoPANZA:更新了答案。从技术上讲,它只是产生对新对象的引用。例如,考虑<代码> int & r= *(new int);< /Cord> @ Hurkl谢谢。你是正确的。未定义的行为只在<代码> *(new int)的值时被调用。我已经更新了我的答案,所以现在我的技术应该是正确的。@ Hurkyl,在这种情况下,一旦你不再需要分配的对象,你就被迫使用<代码>删除和r>代码>。否则你将继续内存泄漏。技术上,它只产生对新对象的引用。例如考虑<代码> int & r= *(new int)。;
@Hurkyl谢谢。你说得对。只有当
*(new int)的值
已被评估。我已更新了我的答案,因此它现在在技术上应该是正确的。@Hurkyl,在这种情况下,一旦不再需要分配的对象,您将被迫使用
delete&r
。否则您将继续发生内存泄漏。