我可以从取消引用new的返回值中初始化引用吗?

问题描述 投票:2回答:2

正如我所看到的,new在免费存储区中分配一个未命名的对象,并返回一个指向该未命名对象的指针。

因此我们可以创建对该对象的引用:

int* pi = new int(100);
int& ri = *pi;

[我感兴趣的是,我可以在免费存储区上创建一个对象,而无需将new的返回值分配给指针,而是通过将new的取消引用的值分配给指针来引用未命名的对象)参考:

int& x = *(new int(7));

cout << x << endl; // 7
x += 34;
cout << x << endl; // 41

我想知道我是否可以这样做,还是一个坏主意?

NB:在生产中,我尽量避免处理原始内存,而是使用智能指针和STL容器。

c++ dynamic-memory-allocation
2个回答
7
投票

我想知道我能做到这一点还是一个坏主意?

您可以这样做,但实际上不应该。原因是因为您不再使用指针,因此更难记住重新分配收到的内存。这使您摆脱了指针的思想框架,并使忘记所有退出路径上的delete调用变得更容易。

当您取消分配时,它也会看起来很奇怪,因为您需要执行类似的操作

delete &x;

0
投票

是,可以。但是我认为这是一个坏主意。一旦该引用超出范围,您将无法释放动态内存(或者您只是忘记了,它是变相的动态内存),这很可能会导致内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.