Big C++不愧为经典!之三个基本函数

谈到析构函数时,几乎所有的我身边的参考书无一例外地只用了一点点篇幅,但Big C++名副其实地难得啰里巴嗦地命中了要害一次

质量提示18.4:如果有析构函数,那么也应有拷贝构造函数及赋值运算符(三个基本函数)

对于管理堆内存的类,必须实现这三个函数

举例:

 

// String 类非标准string类,为个人创造的类,其中没有定义拷贝构造函数
String a  =   " GG " ;     // 分配堆
ExpandedBlockStart.gifContractedBlock.gif
局部作用域 {
    String b 
=a;    //错误,按成员复制会产生共享堆
}
// 局部作用域结束,调用析构函数b.~String(),堆空间被删除

// 此时a的堆空间已被b的析构函数删除

 

一般常见的构造模式:

 

// 拷贝构造函数
ExpandedBlockStart.gifContractedBlock.gif
X::X ( const  X &  right) {
    copy(right);
}


// 赋值运算符重载
ExpandedBlockStart.gifContractedBlock.gif
X &  X:: operator = ( const  X &  right) {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (this !=&right){
        free();
        copy(right);
    }

    
return *this;
}


// 析构函数
ExpandedBlockStart.gifContractedBlock.gif
X:: ~ X() {
    free()
}

 

转载于:https://www.cnblogs.com/latifrons/archive/2009/07/13/1522857.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值