Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;物体泄漏 我目前正在学习C++,我正在体验对象的局部范围。_C++_Pointers - Fatal编程技术网

C++;物体泄漏 我目前正在学习C++,我正在体验对象的局部范围。

C++;物体泄漏 我目前正在学习C++,我正在体验对象的局部范围。,c++,pointers,C++,Pointers,如果我理解正确,使用此代码: void stepOne() { TestClass t1; t1.thisIsAInt = 2;} 一旦我们退出stepOne方法的作用域,t1对象应该从内存中清除 现在,我想测试这个,所以通过调试器我得到了对象的地址,一旦我回到main,我就在调试器得到的地址上做了一个指针 我惊讶地发现指针仍然指向我先前创建的同一个对象 通常,我的理解是,自从我们离开作用域后,对象的内存将被清除 现在, 我不明白吗 得到它的地址是否使它没有离开范围 是操作系统的空闲内存,还

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

void stepOne() {
TestClass t1;
t1.thisIsAInt = 2;}
一旦我们退出stepOne方法的作用域,t1对象应该从内存中清除

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

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

通常,我的理解是,自从我们离开作用域后,对象的内存将被清除

现在,

  • 我不明白吗
  • 得到它的地址是否使它没有离开范围
  • 是操作系统的空闲内存,还是还没有清除?(用零填充)
  • 如果我将指针从stepOne传递到函数,那么一旦我离开作用域,它还会被清除吗?(我知道我可以使用智能指针,以确保它只在本地范围内有效)

一旦对象超出范围并被销毁(在析构函数中添加断点以确保其已被销毁),则不应引用该对象拥有的内存


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

不需要“清除”内存。它已被释放,不允许使用它。如果您使用它,会出现未定义的行为,可能是任何行为。但它被释放,它不是泄漏的对象?不,它不是泄漏的。它被释放,因为它不在范围内。所以,因为它在范围内,我可以传递指针,但一旦它退出范围,我就不应该再使用它了,对吗?@SamuelYvon,对。取消引用指向已破坏对象的指针是未定义的行为。明白了,对我来说很有意义!