首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存泄漏与“新”操作符和"&"?C++

内存泄漏与“新”操作符和"&"?C++
EN

Stack Overflow用户
提问于 2021-02-04 09:18:10
回答 3查看 299关注 0票数 0

这将导致内存泄漏:

代码语言:javascript
复制
int var = *new int(5);

这将不会(如果稍后释放):

代码语言:javascript
复制
int* var = new int(5); 

问题:会导致内存泄漏吗?

代码语言:javascript
复制
int& var = *new int(5);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-04 09:23:55

会导致内存泄漏。您在那里所做的是分配一个内存块,取消引用指针并将其赋值给变量var。当超出作用域时,动态内存分配不会自行释放,相反,变量var将被销毁,而不是您分配的指针。

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

代码语言:javascript
复制
int& var = *new int(5);
delete &var;
票数 2
EN

Stack Overflow用户

发布于 2021-02-04 09:27:05

是的会的。我在中测试了它,它确实测试了它。无论您使用new,还是没有delete,都会有内存泄漏。您分配动态内存,但从未释放它。

票数 0
EN

Stack Overflow用户

发布于 2021-02-04 09:34:15

是的会漏水的。正如已经评论的那样,必须删除每一个新的内容。对于指定给引用&var的匿名堆变量int(5),应该有一个警告,该变量不再有合适的句柄可用。如另一个答案所建议的那样,删除引用是与引用的想法背道而驰的。引用和指针之间最重要的区别在于,期望引用总是有一个目标,而一个人必须期望一个指针正在悬空或为零,并且这样做。此外,还有一种范例,即一旦传递引用,就不会拥有它,所以删除是最后一次使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66042616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档