effective c++ 05,06,07

来源:互联网 发布:python怎么开发网站 编辑:程序博客网 时间:2024/06/01 22:27
#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操作符函数};// 方法2class IUncopyable{protected:IUncopyable(){}~IUncopyable(){}private:IUncopyable(const IUncopyable &);IUncopyable & operator=(const IUncopyable &);};class CXxx : private IUncopyable{};// 方法3 使用 boost 库里面的 nocopyable class/*条款06polymorphic base class 应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。class的设计目的如果不是作为base classes使用,或者不是为了具备多态性,就不应该声明virtual析构函数。*/class CPure{public:virtual ~CPure() = 0; // 小技巧,应该在cpp文件中实现该方法; CPure::~CPure(){}};

原创粉丝点击