effective c++ 05,06,07

#pragma once

#include <string>
using std::string;

/*
     条款05
	 编译器会为class自动创建 default构造函数,一个析构函数,一个copy构造函数,一个 copy assignment操作符
*/

/*
	1. 当成员变量有 const 变量, 编译器无法自动生成default构造函数; 不会自动生成 copy assignment操作符函数
	   必须自己主动添加构造函数和copy assignment操作符函数
	2. 成员变量为引用时也是如此。
	3. 如果base class将copy assignment操作符声明为private, 编译器将拒绝为derived class 生成copy assignment操作符
*/
class CTest
{
public:
	CTest(int nVal = 0, double dVal = 0.0):m_nVal(nVal),m_dVal(dVal){}

public:
	const int   m_nVal;

	double     &m_dVal;
};

inline void TestAll()
{
	CTest t1;
}

/*
	条款06 禁止编译器自动生成函数,可将相应的函数声明为private并且不予实现。
*/
class CMyClass
{
private:
	CMyClass(const CMyClass &);                 // 禁止 copy 构造函数

	CMyClass& operator=(const CMyClass &);      // 禁止 copy assignment操作符函数
};

// 方法2
class IUncopyable
{
protected:
	IUncopyable(){}
	~IUncopyable(){}

private:
	IUncopyable(const IUncopyable &);
	IUncopyable & operator=(const IUncopyable &);
};

class CXxx : private IUncopyable
{

};

// 方法3 使用 boost 库里面的 nocopyable class

/*
	条款06
	polymorphic base class 应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。
	class的设计目的如果不是作为base classes使用,或者不是为了具备多态性,就不应该声明virtual析构函数。

*/
class CPure
{
public:
	virtual ~CPure() = 0; // 小技巧,应该在cpp文件中实现该方法; CPure::~CPure(){}
};




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值