我有以下代码,似乎可以用 new 创建一个引用,但是当涉及到用 new 创建一个对象时,当我尝试重新收集分配的内存时它崩溃了
float &f = *new float(1.3);
delete &f;
float f1 = *new float;
delete &f1;
我想知道区别,谢谢!
最佳答案
考虑:
float f1 = *new float;
它在空闲存储上创建一个float
类型的对象,然后将原始对象复制到f1
。您丢失了原始空闲存储对象的地址,这会立即导致内存泄漏。
所有内存取消分配函数都要求传递给它们的地址应该与内存分配函数返回的地址相同,因此当您调用 delete 时,您最终会遇到未定义的行为
在未通过 new
返回的地址上。
请注意,未定义的行为并不一定会导致崩溃,但没有崩溃并不意味着代码中没有问题。
关于c++ - 在 C++ 中使用 new 创建引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19887162/