如果你定义一个空类,编译器自动为你做的就是申明四个函数,分别是:
1,构造函数
2,copy构造函数
3,copy assignment构造函数
4,析构函数
比如:
class Moon{}
class Moon{
public:
// 构造函数
Moon(){}
// 拷贝构造函数
Moon(const Moon &yueliang){}
// 复制赋值函数
Moon &operator=(const Moon &yueliang){}
// 析够函数
~Moon(){}
}
上面的类是Moon,客观真理告诉我们月亮不可能被复制构造另一个,所以对于不能含有复制构造函数的类,在C++中有两种较为标准的写法:
1,定义一个公共基类,继承这个基类就能禁止复制构造,如:
class Celestial{
protected:
Celestial(){}
~Celestial(){}
private:
Celestial(const Celestial&){}
Celestial& operator=(const Celestial&){}
}
class Moon:private Celestial{
}
2,创建一个宏,将其放到独一无二的对象的private中:
#define NO_COPY(Typename) Typename(const Typename&); void operator=(const Typename&);
据董的博客所说,第二种方式较好。
此内容为《董的博客》的effective c++部分所理解提成。