看Code
1: class B
2: {
3: };
4:
5: class A
6: {
7: public:
8: A()
9: {
10: m_pB = new CB;
11: }
12: ~A()
13: {
14: delete m_pB;
15: m_pB = NULL;//强烈建议保留该行code
16: }
17: private:
18: CB * m_pB;
19: };
相信很多人都认为Line 15是完全没有必要的,因为对象已经销毁且没人再用这个对象了;保留该行有如下好处:
1. 我们不能保证没有其他人调用该类CA,也就是说,有可能CA的实例被其他部分使用。
2. 一旦出现CA实例销毁后被其他模块使用的情况,我们在debug的时候很容易通过设置的“m_pB=NULL”来发现是否CA已经被销毁;否则,CA被销毁后,m_pB保留的是一个根本无法访问的野指针,表面看仍旧是个有效的地址,但其实它已经被销毁了。
本文探讨了在C++中析构函数里将指针置为NULL的做法,并解释了这一操作对于调试和避免野指针的重要性。通过实例说明了在某些情况下,即使对象已被销毁,仍可能被误用,此时置空指针能帮助快速定位问题。
1657

被折叠的 条评论
为什么被折叠?



