C++之DISALLOW_COPY_AND_ASSIGN
2021/9/3 14:05:58
本文主要是介绍C++之DISALLOW_COPY_AND_ASSIGN,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DISALLOW_COPY_AND_ASSIGN本身是一个宏,其定义如下: // A macro to disallow the copy constructor and operator= functions // This should be used in the private: declarations for a class #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator=(const TypeName&) 然后,我们可以在Foo类中这样使用: class Foo { public: Foo(int f); ~Foo(); private: DISALLOW_COPY_AND_ASSIGN(Foo); };
Google C++编程规范 – 第三十二条 -《拷贝构造函数》
【规范】
仅在确认需要的时候,才定义拷贝构造函数和赋值运算符;否则,请使用DISALLOW_COPY_AND_ASSIGN关闭此功能。
【定义】
我们通过拷贝构造函数和赋值运算符来实现对一个类对象的拷贝。在一些情况下,编译器会隐式的调用拷贝构造函数,比如在以值传递方式传递对象时。
【支持者的声音】
拷贝构造函数,使得拷贝一个类对象变得很容易。STL容器更是规定其内容都要是可拷贝和可赋值的。拷贝构造方式要比CopyFrom方式更加高效,这是因为拷贝构造方式将构造和拷贝两者结合起来了。而且在一些上下文中编译器会省略掉它们,并且它们会更容易的避免堆分配。
【反对者的声音】
隐式的类对象拷贝会引入很多bug和性能方面的问题,还会因为很难追踪一个类对象的行为而导致代码的可读性的降低。
【结论】
只有很少的类需要进行拷贝。而大多数的类既不需要拷贝构造函数,也不需要赋值运算符。在很多情况下,一个指针或一个引用其实已经足够,而且还会有更好的性能表现。比如,你可以通过传入指针、引用来代替传入一个值,你还可以在STL容器中保存对象的指针,而非对象本身。
如果你的类就是需要可拷贝,那么最好提供一个拷贝方法,比如CopyFrom()或Clone(),而非一个拷贝构造函数,这样可以有效的避免隐式调用。如果拷贝方法还不足以满足你的需求(比如性能方面的原因,或者你的类就是需要在容器中保存对象本身),那么请同时提供拷贝构造函数和赋值运算符。
如果你的类不需要拷贝构造函数或赋值运算符,那么请显式的禁用它们。禁用的方法是在类的private区域中增加一个拷贝构造函数和赋值运算符的哑声明,但是不要提供相应的定义。
这篇关于C++之DISALLOW_COPY_AND_ASSIGN的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-06有没有什么开源的py项目可以对图像进行分类-icode9专业技术文章分享
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享