正如我所看到的,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容器。
我想知道我能做到这一点还是一个坏主意?
您可以这样做,但实际上不应该。原因是因为您不再使用指针,因此更难记住重新分配收到的内存。这使您摆脱了指针的思想框架,并使忘记所有退出路径上的delete
调用变得更容易。
当您取消分配时,它也会看起来很奇怪,因为您需要执行类似的操作
delete &x;
是,可以。但是我认为这是一个坏主意。一旦该引用超出范围,您将无法释放动态内存(或者您只是忘记了,它是变相的动态内存),这很可能会导致内存泄漏。