最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!
若想禁用拷贝构造函数和拷贝赋值运算符,可以在 private
权限中声明拷贝构造函数和拷贝赋值运算符,如下述代码:
class HomeSale{
public:
HomeSale(int no):m_no(no){};
private:
HomeSale(const HomeSale&);//因为不打算实现,可以省略参数名称
HomeSale& operator=(const HomeSale&);
int m_no;
}
int main()
{
HomeSale h1(10);
HomeSale h2(20);
HomeSale h3(h1); //编译不通过
h1 = h2; //编译不通过
return 0;
}
还可以在一个专门的类 Uncopyable
内阻止拷贝行为,将需要禁止拷贝行为的类继承Uncopyable
,编译器创建的拷贝函数和拷贝赋值运算符会尝试调用其基类的兄弟,那些调用会被编译器拒绝,因为private
权限内的成员只有类自身可以访问。
class Uncopyable{
protected:
Uncopyable();
~Uncopyable();
private:
Uncopyable(const Uncopyable&); //将拷贝函数转移至此
Uncopyable& operator=(const Uncopyable&);
};
class House:public Uncopyable{...}; //公有继承