C++的局部變量在作用域結束后,一般都會被回收。如下面這段代碼
1 map<a*, b*> _map; 2 3 void fun() 4 { 5 a _a; 6 b _b; 7 _map[&_a] = &_b; 8 }
當fun執行完成后,a、b對象都會被析構,所以再訪問這兩個對象就會出現問題。
一種方法是將a、b對象的作用域改為全局的,但不符合建議。
一種解決方法是用new實例化對象,這樣,當fun執行完成后,C++便不會主動回收這兩個對象
1 void fun() 2 { 3 a* _a = new a(); 4 b* _b = new b(); 5 _map[_a] = _b; 6 }
但new完對象后,一定要delete掉該對象。delete相當於調用了對象的析構函數。
