首页 > 代码库 > Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝

Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝

一、为驳回编译器自动提供的机能,可将相应成员函数声明为private并且不予实现。(如果你仅仅是自己不实现的话,编译器会帮你实现)

  如:

class A{    public:        A(const string& name):m_name(name) {}    private:        //拒绝copy和赋值,声明为private,并且只声明不实现        A(const A&);        A& operator=(const A&);    private:        string m_name;};

二、对于拒绝赋值的copy的类,也可以继承一个Uncopyable的基类

class Uncopyable{    public:        Uncopyable() {}        ~Uncopyable() {}    private:        Uncopyable(const Uncopyable&);        Uncopyable& operator=(const Uncopyable&);};
class A: public Uncopyable // 继承Uncopyable不一定要是public !{ public: A(const string& name): m_name(name) {} private: string m_name;};

 

Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝