Effective.C 读书笔记03

条款05:了解C++默默编写并调用哪些函数

请记住:编译器可以暗自为class 创建default构造函数、copy构造函数、copy assignment 操作符,以及析构函数。

但是如果成员变量中有const 或者& 编译器将拒绝执行copy构造函数和copy assignment 操作符。

如果base classes 将copy assignment 操作符声明为private ,编译器将拒绝为其derived classes 生成一个copy assignment 操作符。

条款06:若不想使用编译器自动生成的函数,就改明确拒绝

可以采用如下操作,声明一个base classes 屏蔽编译器自动生成的函数

 class Uncopyable
{
protected:                     
      Uncopyable(){}    //允许derived 对象构造和析构
	  ~Uncopyable(){}
private:
	Uncopyable(const Uncopyable&); // 但阻止copying
	Uncopyable& operator=(const Uncopyable&);
};
 class HomeForSale:private Uncopyable
 {
	 ...
 }
也可以在Boost 中有个名为noncopyable的class 

请记住:为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用想Uncopyable这样的base class 也是一种做法。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值