关闭

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

141人阅读 评论(0) 收藏 举报
分类:

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复制构造函数来共同处理

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:101003次
    • 积分:5185
    • 等级:
    • 排名:第5489名
    • 原创:437篇
    • 转载:20篇
    • 译文:1篇
    • 评论:0条