我有以下代码,似乎用 new 创建引用是可以的,但是当用 new 创建对象时,当我尝试重新收集分配的内存时,它会崩溃
float &f = *new float(1.3);
delete &f;
float f1 = *new float;
delete &f1;
我想知道有什么区别,谢谢!
考虑:
float f1 = *new float;
它创建一个类型的对象float
在免费存储上,然后将原始对象复制到f1
。您丢失了原始自由存储对象的地址,这会给您带来即时内存泄漏。
所有内存解除分配函数都要求传递给它们的地址应与内存分配函数返回的地址相同,因此您最终会得到一个未定义的行为你打电话时delete
在未通过以下方式返回的地址上new
.
请注意,未定义的行为并不强制崩溃,但没有崩溃并不意味着代码中没有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)