"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)
的,不再有合适的句柄可用。
按照另一个答案中的建议删除参考是违反参考的想法的。引用和指针之间最重要的区别是期望引用始终具有目标的好处,而必须期望指针悬空或为零并像这样行事。此外还有一种范例,一旦引用被传递,它就不再拥有引用,因此删除是最后一个应该处理的。
这会导致内存泄漏:
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)
的,不再有合适的句柄可用。
按照另一个答案中的建议删除参考是违反参考的想法的。引用和指针之间最重要的区别是期望引用始终具有目标的好处,而必须期望指针悬空或为零并像这样行事。此外还有一种范例,一旦引用被传递,它就不再拥有引用,因此删除是最后一个应该处理的。