《Effective C++读书笔记》--条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
来源:互联网 发布:zk和nginx 编辑:程序博客网 时间:2024/05/16 23:53
首先我们要明确,编译器产出的所有函数都是public,因此将成员函数声明为private且故意不去实现他们可以阻止编译器为你自动生成你不想要的函数。但我们在member函数或friend函数中使用该函数时,那么会在连接时发生错误,我们可以将错误迁移至编译阶段,此时的方法就是专门设计一个阻止拷贝动作的基类,这个基类的实现如下:
class Uncopyable{protected: Uncopyable(){} ~Uncopyable(){}private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&);};
然后让我们想实现的类继承这个基类,就可以任何阻止拷贝动作。因为当任何对象(包括member和friend函数)尝试拷贝我们实现的对象时,编译器试着生成一个拷贝构造函数和赋值操作符,这些函数的编译器生成版会调用其基类的对应兄弟,但由于其基类的拷贝构造函数和赋值操作符是private,则编译器就会拒绝该操作。
读到此处我想起了一个问题,如何设计一个仅有一个实例的类,那么就可以将该类的构造函数声明为private,并声明该类的一个指针为static并且是private成员,并在public中返回一个接口指向该指针。同时为了保证正确delete该指针可以设计一个辅助类,在其析构函数中删除,并且在private中声明该辅助类的一个static实例,由于C++在结束时会释放所有静态成员,所以当该类要被delete时,他的private静态成员会被释放,析构函数被调用,从而删除了该唯一的实例。
阅读全文
0 0
- 《Effective C++读书笔记》--条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
- Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
- [Effective C++]条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 读书笔记《Effective C++》条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++条款06解读 : 若不想使用编译器自动生成的函数, 就应该明确拒绝
- Effective C++ 读书笔记 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- effective c++若不想使用编译器自动生成的函数,就应该明确拒绝
- Effective C++学记之06 若不想使用编译器自动生成的函数,就应该明确拒绝。
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝.
- 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06 若不想使用编译器自动生成的函数 就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 1028. 人口普查(20)
- Linux网络管理器_Linux上如何停用网络连接管理器【译】
- 思维导图带你解锁旅行新姿势
- Device eth0 does not seem to be present
- 解决Qt和QML都会出现的问题,Qt5.6.1 msvc2013版本,qt.network.ssl: QSslSocket: cannot call unresolved function SSLv2
- 《Effective C++读书笔记》--条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
- Java中substring内存泄露问题
- 4.15 leetcode -15 longest-palindromic-substring
- Java并发编程:volatile关键字解析
- Nginx–http请求的生命周期图解
- C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)
- Linux学习笔记:包管理工具aptitude
- windows 10 64bit+Tensorflow+Keras+VS2015+CUDA8.0+cuDNN v6.0 GPU加速
- 菜鸟之初 Scrollview