C++ 为什么地图::clear不';你不给析构函数打电话吗?
我运行以下程序,注意C++ 为什么地图::clear不';你不给析构函数打电话吗?,c++,map,reference,destructor,C++,Map,Reference,Destructor,我运行以下程序,注意映射的值是一个ref(ClassA&)- #include <iostream> #include <map> using namespace std ; class ClassA { public : ClassA () { cout<<"Hay ! "<<endl ; } ~ClassA () { cout<<"Bye ! "<<en
映射的值是一个ref(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() ;
}
似乎myMap.clear()
没有受到影响,因为没有人再调用ClassA
析构函数,你能解释一下原因吗 删除引用时不调用析构函数。说到这里。。我认为删除引用时不会调用析构函数。说到这里。。我想那不应该编译,你用的是什么编译器?@Nick我在VS2012和GCC4.3.4上测试过,两个都可以@Nick我有g++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3不应该编译的,你用的是什么编译器?@Nick我在VS2012和GCC4.3.4上测试过,两个都可以@尼克,我有g++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3
Hay !
Bye !