effective C++笔记之条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符


l        当类里有指针,并且需要动态分配时,如果没有定义自己的拷贝构造函数和赋值操作符,使用编译器合成的缺省的操作,将会带来一些严重的后果,如内存泄漏(调用赋值操作符时)、调用两次delete(如以类对象进行传值调用、调用拷贝构造函数时)。

l        用delete去删除一个已经被删除的指针,其结果是不可预测的。

l        只要类里有指针,就要写自己版本的拷贝构造函数和赋值操作符。在这些函数里,你可以拷贝那些被指向的数据结构,从而使每个对象都有自己的拷贝;或者可以采用某种引用计数机制去跟踪当前有多少个对象指向某个数据结构。引用技术的方法更复杂,而且它要求构造函数和析构函数内部做更多的工作,但在某些(虽然不是所有)程序里,它会节省内存并切实提高速度。

l        对于某些类,当实现拷贝构造函数和赋值操作符非常麻烦时,特别是可以确信程序中不会做拷贝和赋值操作的时候,去实现他们就会相对来说有点得不偿失。可以只声明这些函数(声明为private成员)而不去定义(实现)它们。这就防止了会有人去调用它们,也防止了编译器去生成它们。(条款27)。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值