拷贝构造函数

含指针的类,存在深拷贝和浅拷贝问题

下面示例显示,

类A析构函数进行指针内存的释放,而不重载相应的拷贝构造函数,

局部变量析构的时候会释放成员变量f对应内存,导致mAmap结构中数据的无效。

所以需要重写A的拷贝构造函数,进行深拷贝。当然具体情况以类定位为依据。

class A

{
public:
  A()
  {
    f = new float(0.34);
  }
  A(const A& a)
  {
    f = new float(*a.f);
    //f = a.f;
  }
  A& operator = (const A& a)
  {
    f = a.f;
    return *this;
  }
  ~A()
  {
    delete f;
    f = NULL;
  }
  float* f;
};

void main ()

{

  typedef std::map<std::string,A>AMap;

  AMap mAmap;
  {

    A a;
    mAmap.insert(AMap::value_type("aa",a));
  } 

}