"new" 运算符和“&”导致内存泄漏? C++

Memory leak with "new" operator and "&"? C++

这会导致内存泄漏:

int var = *new int(5);

这不会(如果以后释放):

int* var = new int(5); 

问题:会不会导致内存泄露?

int& var = *new int(5);

是的,我应该改用智能指针,但这不是问题:)

会造成内存泄漏。您在那里所做的是分配一块内存,取消引用指针并将其分配给变量 var。当超出范围时,动态内存分配不会自行释放,而是变量 var 将被销毁,而不是您分配的指针。

要删除它,你需要做的是这样的,

int& var = *new int(5);
delete &var;

是的,会的。我在 Visual studio 中测试过,确实如此。无论您在何处使用 new 而没有 delete,都会发生内存泄漏。您分配了动态内存但从未释放它。

是的,它会泄漏。 正如已经评论的那样,每个新的都必须删除。 对引用 &var 的赋值应该有一个警告 然后是匿名堆变量 int(5) 的,不再有合适的句柄可用。 按照另一个答案中的建议删除参考是违反参考的想法的。引用和指针之间最重要的区别是期望引用始终具有目标的好处,而必须期望指针悬空或为零并像这样行事。此外还有一种范例,一旦引用被传递,它就不再拥有引用,因此删除是最后一个应该处理的。