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,对。取消引用指向已破坏对象的指针是未定义的行为。明白了,对我来说很有意义!