C++ 学习(继承和动态内存分配)

1> 派生类不使用new

class baseDMA{
  private:
  char * label;
  int rating;
  public:
   baseDMA(const char *l = "null", int r = 0);
   baseDMA(const baseDMA & rs);
   virtual ~baseDMA();
   baseDMA & operator = (const baseDMA & rs);
   ...
}

class lacksDMA : public baseDMA
{
  private : 
   char color[40];
  public:
  .... 
}

不需为派生类定义显示的复制构造,析构,赋值符号等从操作
派生类的默认构造函数,编译器将自定义默认的构造函数要进行一些操作: 执行之自身的代码后调用基类 的析构函数。

1> 派生类不使用new

class baseDMA{
  private:
  char * label;
  int rating;
  public:
   baseDMA(const char *l = "null", int r = 0);
   baseDMA(const baseDMA & rs);
   virtual ~baseDMA();
   baseDMA & operator = (const baseDMA & rs);
   ...
}

class hashDMA : public baseDMA
{
  private : 
   char *style;
  public:
  .... 
}

在这种情况下必须使用派生类显示析构函数,复制构造函数和复制操作等

派生类析构函数自动调用基的析构函数,所以自身的指责是对派生类构造函数执行工作的清理。所以hasDMA析构函数必须释放style管理的内存,应依赖于baseDMA的析构函数来释放lable管理的内存。

所以

baseDMA :: ~baseDMA(){ delete [] lable;}
hasDMA :: ~hasDMA(){delete [] style;}

hasDMA的复制构造函数只能访问hasDMA的数据。它必须调用baseDMA复制构造函数来共同处理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值