+ -
当前位置:首页 → 问答吧 → 指针指向的对象类型 多态 内存释放

指针指向的对象类型 多态 内存释放

时间:2011-12-07

来源:互联网

基类中有一个私有对象指针,有一个虚方法,虚方法中有这个指针赋值;
class base{
private:
  A *component;
public:
  void function(A *P){ 
  component = p; //这里如何实现深拷贝,由于多态指向的对象不一样
  }
  virtual void functionShow(){
  //do something
  }
  ……
};
class derivelOne:public base{
  virtual void functionShow(){
  //do something 
  }
  ……
};
class derivelTwo:public base{
  virtual void functionShow(){
  //do something 
  }
  ……
 };

int main()
{
  A myA = new A();
  deriveOne one = new deriveOne();
  deriveTwo two = new deriveTwo();
  one->function(myA);
  two->function(one);
  delete two;
  //我想像下面这样写,可是上面已经释放了共同指向的内存;
  /* delete one;
  delete two;
  */
}

作者: xiaoyanghuaban   发布时间: 2011-12-07

A *component;你的类里面有一个指针成员,而这个指针又是指向一段动态分配的内存的,这个时候你就应该重新定义自己的拷贝构造和复制构造函数
deriveOne one = new deriveOne();
deriveTwo two = new deriveTwo();
自然是要delete one;
  delete two;
这是不同堆区间上的2块空间,没有关系,尽管他们的指针成员共同指向另一块堆区间,但是毫不影响
应为这块空间是new的,我没看到你使用delete component;所以这段空间是一只存在的,就算对象析构了他也不会被回收

作者: qscool1987   发布时间: 2011-12-08

对象A应该定义自己的拷贝构造函数,在执行component = p;会自动调用A类的拷贝构造函数来完成深拷贝

作者: liru125504   发布时间: 2011-12-08