我运行以下程序,请注意valuemap是引用(ClassA&)-

#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析构函数,您能解释一下为什么吗?

最佳答案

删除引用时不调用析构函数。说到其中..我以为maps with references would be illegal

关于c++ - 为什么map::clear不调用析构函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13739940/

10-12 04:50