2012-12-06 54 views
1

我跑到下面的程序,注意mapvalue是裁判(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析構函數,你能解釋一下爲什麼嗎?

+0

這不應該編譯,你使用什麼編譯器? – imreal

+0

@Nick我在VS2012和GCC4.3.4上都測試過了。 http://ideone.com/OW3gd9 – billz

+0

@Nick我有g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3 – URL87

回答

相關問題