Explicitly disallow the use of complier-generated functions you do not want
上一条款我们已经知道,编译器会自动给我生成一些函数,那么当我们不希望class产生提供的方法,只要不声明对应函数就是了,但这个策略在对copy构造函数和copy assignment操作符时却不起作用,因为编译器会帮我们声明它们,解决的方法就是将它们声明为private,人为的组织它们被调用。
但这个做法并没有那么完美,因为member函数还有friend函数还是可以调用private函数。看下面的代码:
唯一的办法就是根本就不实现它,让编译器链接时直接抱怨有错误。在boost类库中提供了一个阻止这些情况的类型用来给予开发人员使用。大致形如这样的设计:
这行得通,因为只要任何人――甚至是
member函数或
friend函数――尝试拷贝
X
对象,编译器便试着生成一个
copy构造函数和一个
copy assignment操作符,这些函数的“编译器生成版“会尝试调用其
base class的对应兄弟,那些调用会被编译器拒绝,因为其
base
class的拷贝函数是
private。
请记住:
为驳回编译器自动(暗自)提供的机能,可以将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。
分享到:
相关推荐
C++学习书籍——effective c++ 3rd(中英文)
Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读
effective c++读书笔记和总结 effective c++读书笔记和总结
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...
自己整理的侯捷版本<<Effective C++ 改善程序与设计的55个具体做法>> 学习笔记.
effective C++读书笔记,effective C++读书笔记,effective C++读书笔记
effective C++ 很好 很不错 最好的C++进阶资料
条款06:若不想使用编译器自动成生的函数,就该明确拒绝 条款07:为多态基类声明Virtual析构函数 条款08:别让异常逃离析构函数 条款09:绝不在构造和析构过程中调用Virtual函数 条款10:令Operator=返回一个...
Effective C++跟more Effective c++
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
电子版的effective c++ 和more effective c++ c++四书五经中介绍的经典书籍
Effective C++.mobi kindle可用 学习一种编程语言的基础是一回事;学习如何用那种语言设计和实现高效率的程序完全是另外一回事。对于 C++ ——一种以拥有非同寻常的能力范围和表现力而自豪的语言——更是尤其如此。...
内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。
effective c++ & more effective c++ 纯文字版
中文版 chm Effective C++ More effective C++
《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和...
Effective C++ & More Effective C++.chm
条款27:如果不想使用隐式生成的函数要显示的禁止它 条款28:划分全局名字空间 4、类和函数:实现 条款29:避免返回内部数据的句柄 条款30:避免这样的成员函数,其返回值是指向成员的非CONST指针或引用 条款31:千万不要...