c++ - 在 C++ 中使用 new 创建引用

标签 c++ reference

我有以下代码,似乎可以用 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/

相关文章:

c++ - C++ 中的字符串类 e char

c++ - 将自定义 QMetaType 与 QDataStream 结合使用

Java String += 需要速记解释

c++ - C++ 中的获取进程名称

c++ - 将属性保护/私有(private)的任何性能原因?

javascript - MongoDB/Mongoose/nodejs 中的引用资料 - 并行化

reference - Rust:引用如何成为类型?

R-基于引用其他行中的值的条件计算

c# - NullReferenceException 未处理,对象引用未设置为对象的实例

c++ - DirectInput8Create 失败 : E_INVALIDARG