首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++对象泄漏

C++对象泄漏
EN

Stack Overflow用户
提问于 2017-04-01 15:19:12
回答 1查看 377关注 0票数 2

我目前正在学习C++,并且正在体验本地对象的范围。

如果我正确理解,使用以下代码:

代码语言:javascript
复制
void stepOne() {
TestClass t1;
t1.thisIsAInt = 2;}

一旦我们退出stepOne方法的作用域,t1对象应该从内存中清除。

现在,我想测试这个,所以在调试器中我得到了对象的地址,一旦我回到main,我就在调试器得到的地址上做了一个指针。

我惊讶地发现,指针仍然指向我前面创建的同一个对象。

通常情况下,我的理解是,自从我们离开作用域后,对象就会被清除掉内存。

现在,

  • 我不明白吗?
  • 它的地址让它没有离开范围吗?
  • 它是否为操作系统释放内存,只是还没有清除?(满是零)
  • 如果我将指针传递到来自stepOne的函数,那么一旦我离开作用域,它还会被清除吗?(据我所知,我可以使用一个智能指针,以确保它只存在于本地范围内)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-01 15:22:14

一旦一个对象超出了作用域并被解构(在析构函数中添加一个断点以确保它是),您就不应该引用该对象所拥有的内存。

仅仅因为对象被破坏并不意味着它所占用的内存就会“消失”。内存仍然存在,除非被另一个对象重用,否则不会更改其内容。清除内存需要(一点点)时间,每一秒可能需要数千次,这会突然变得非常昂贵。

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

https://stackoverflow.com/questions/43158564

复制
相关文章

相似问题

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