25、深入探索类与动态内存管理

深入探索类与动态内存管理

1. 重载赋值运算符

当类的数据成员指向堆上的内存时,我们需要考虑编写一个复制构造函数,为新对象分配内存并进行深拷贝。同时,也要考虑重载赋值运算符。

在赋值语句中,如果两边都是同一类的对象,就会调用该类的赋值运算符成员函数。如果我们没有自己编写赋值运算符成员函数,编译器会提供一个默认的。默认的赋值运算符和默认的复制构造函数一样,只进行成员逐个复制。

对于简单的类,默认赋值运算符通常是可以的。但当类有指向堆上值的数据成员时,就应该自己编写重载赋值运算符,否则在对象赋值时会产生浅拷贝。

以下是一个 Critter 类的重载赋值运算符的示例:

// 类定义内的声明
Critter& Critter::operator=(const Critter& c);
// 类定义外的成员函数定义
Critter& Critter::operator=(const Critter& c)
{
    cout << "Overloaded Assignment Operator called\n";
    if (this != &c)
    {
        delete m_pName;
        m_pName = new string(*(c.m_pName));
        m_Age = c.m_Age;
    }
    return *this;
}

重载赋值运算符成员函数应返回一个对 Critter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值