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



正如我所看到的,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

我想知道我能不能这样做,或者这是个坏主意?

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

我想知道我能不能做到这一点,或者这是个坏主意?

你可以这样做,但你真的不应该这样做。原因是,由于不再使用指针,因此很难记住取消分配收到的内存。这会让您摆脱指针的思维框架,并使您更容易忘记在所有出口路径上调用delete

当你解除分配时,它也会看起来很奇怪,因为你需要做一些类似的事情

delete &x;

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

最新更新