1
我跑到下面的程序,注意map
的value
是裁判(ClassA&)
-爲什麼map :: clear不會調用析構函數?
#include <iostream>
#include <map>
using namespace std ;
class ClassA {
public :
ClassA() { cout<<"Hay ! "<<endl ; }
~ClassA() { cout<<"Bye ! "<<endl ; }
} ;
int main() {
map< string,ClassA& > myMap ;
ClassA a ;
myMap.insert(pair<string,ClassA&>("A",a)) ;
myMap.clear() ;
}
並獲得輸出 -
Hay !
Bye !
好像myMap.clear()
沒有影響的原因是沒有多一個叫ClassA
析構函數,你能解釋一下爲什麼嗎?
這不應該編譯,你使用什麼編譯器? – imreal
@Nick我在VS2012和GCC4.3.4上都測試過了。 http://ideone.com/OW3gd9 – billz
@Nick我有g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3 – URL87