Item 6: Explicitly disallow the use of compiler-generated functions you do not want.
在C++中,编译器会自动生成一些你没有显式定义的函数。可以参考:了解c++默默编写并调用哪些函数
然而有时候我们希望禁用掉这些函数,可以通过把自动生成的函数设为 private
来禁用它或者在 c++11
中使用 delete
关键字。
比如我们禁用拷贝的功能:
1 2 3 4 5 6 7 8 9 10
| class HomeForSale { public: ... private: HomeForSale(const HomeForSale &); HomeForSale& operator=(const HomeForSale&) = delete;
};
|
我们可以专门设计一个阻止copying
的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| namespace noncopyable_ { class noncopyable { protected: noncopyable() {} ~noncopyable(){}
private: noncopyable(const noncopyable&); noncopyable& operator=( const noncopyable& );
}; }
|
1 2 3 4 5 6 7 8 9 10
| class HomeForSale : private noncopyable_::noncopyable { };
HomeForSale p1, p2; p1 = p2;
error: object of type 'HomeForSale' cannot be assigned because its copy assignment operator is implicitly deleted p1 = p2; ^
|