2012-12-06 138 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

回答

相关问题