更多C++学习笔记,关注 wx公众号:cpp读书笔记
Item 11: Prefer deleted functions to private undefined ones.
如果你写的代码要被其他人使用,你不想让他们调用某个特殊的函数,你通常不会声明这个函数。无声明,不函数。简简单单!但有时C++会给你自动声明一些函数,如果你想防止客户调用这些函数,事情就不那么简单了。
上述场景见于特殊的成员函数,即当有必要时C++自动生成的那些函数。Item17详细讨论了这些函数,但是现在,我们只关心拷贝构造函数和拷贝赋值运算符重载。本节主要致力于讨论C++98中那些被C++11所取代的最佳实践,而且在C++98中,你想要禁止使用的成员函数,几乎总是拷贝构造函数或者赋值运算符,或者两者都是。
在C++98中防止调用这些函数的方法是将它们声明为私有(private
)成员函数并且不定义。举个例子,在C++ 标准库iostream继承链的顶部是模板类basic_ios
。所有istream和ostream类都继承此类(直接或者间接)。拷贝istream和ostream是不合适的,因为这些操作应该怎么做是模棱两可的。比如一个istream
对象,代表一个输入值的流,流中有一些已经被读取,