C++ 对象泄漏

Sam*_*von 2 c++ pointers

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

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

void stepOne() {
TestClass t1;
t1.thisIsAInt = 2;}
Run Code Online (Sandbox Code Playgroud)

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

现在,我想对此进行测试,因此使用调试器获得了对象的地址,一旦我回到main,我就在从调试器获得的地址上创建了一个指针。

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

通常,据我所知,自从我们离开作用域后,对象就会被清除内存。

现在,

  • 我没有正确理解它吗?
  • 获取它的地址是否使它不离开范围?
  • 它是操作系统的可用内存,还没有清除吗?(用零填充)
  • 如果我将指针传递给 stepOne 中的函数,一旦我离开作用域,它还会被清除吗?(我知道我可以使用智能指针,以确保它只在本地范围内存活)

Som*_*ude 5

一旦对象已经超出了范围,并破坏(在析构函数中添加断点,以确保它是)你不应该引用的内存由该对象所拥有。

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