码迷,mamicode.com
首页 > 其他好文 > 详细

继承和动态内存分配——需要为继承类定义 显式析构函数、复制构造函数和赋值运算符

时间:2016-07-12 21:06:54      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

当派生类使用了new时,必须为派生了定义显式析构函数、复制构造函数和赋值运算符。
(这里假设hasDMA类继承自baseDMA类)
显式析构函数:

baseDMA::~baseDMA() // takes care of baseDMA stuff
{
    delete [] label;
}

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

复制构造函数:

baseDMA::baseDMA(const baseDMA & rs)
{
    label = new char[std::strlen(rs.label) + 1];
    std::strcpy(label, rs.label);
    rating = rs.rating;
}

hasDMA::hasDMA(const hasDMA & hs)
            : baseDMA(hs)
{
    style = new char[std::strlen(hs.style) + 1];
    std::strcpy(style, hs.style);
}

赋值运算符:

baseDMA & baseDMA::operator=(const baseDMA & rs)
{
    if (this == &rs)
        return *this;
    delete [] label;
    label = new char[std::strlen(rs.label) + 1];
    std::strcpy(label, rs.label);
    rating = rs.rating;
    return *this;
}

hasDMA & hasDMA::operator=(const hasDMA & hs)
{
    if (this == &hs)
        return *this;
    baseDMA::operator=(hs); // copy base portion
    delete [] style;        // prepare for new style
    style = new char[std::strlen(hs.style) + 1];
    stdLLstrcpy(style, hs.style);
    return *this;
}

 

继承和动态内存分配——需要为继承类定义 显式析构函数、复制构造函数和赋值运算符

标签:

原文地址:http://www.cnblogs.com/moonlightpoet/p/5664631.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!