C++ 深入理解系列-构造函数的技巧
来源:互联网 发布:淘宝网千人千面 编辑:程序博客网 时间:2024/06/14 15:22
**
引言
**
有时候我们会不希望当前类被复制,因为有可能类中的成员不建议被复制比如锁,一些智能引数等,这个时候想到的办法就是禁止类中拷贝构造函数和重载操作符=这两个成员函数的禁用了,有以下两种方法可以解决这个问题。
用delete关键字
// c++ 11以上均可用class TestDeleteCopy{public: TestDeleteCopy(int count): m_count(count) {}public: TestDeleteCopy(const TestDeleteCopy&) = delete; TestDeleteCopy& operator=(const TestDeleteCopy&) = delete;private: int m_count; pthread_mutex_t m_Mutex;};
以上用delete关键字将两个具有拷贝功能的函数给屏蔽了。
函数私有化
// 任何版本均可用class TestPrivateCopy{public: TestPrivateCopy(int count): m_count(count) {}private: TestPrivateCopy(const TestPrivateCopy&); TestPrivateCopy& operator=(const TestPrivateCopy&);private: int m_count; pthread_mutex_t m_Mutex;};
私有化这两个函数,外部是无法成功调用的。
通常的c++类:
class TestCopyConstructor{public: TestCopyConstructor(int count): m_count(count) {}public: TestCopyConstructor(const TestCopyConstructor& other){ this->m_count = other.m_count; std::cout<<"copy constructor called!"<<std::end; } TestCopyConstructor& operator=(const TestCopyConstructor&other){ this->m_count = other.m_count; std::cout<<"operator = called!"std::end; return *this; }private: int m_count; //pthread_mutex_t m_Mutex;};
测试拷贝过程的调用过程:
TestCopyConstructor a(1);TestCopyConstructor b = a;//copy constructor called!b=a;//operator = called!TestCopyConstructor c(a);//copy constructor called!
这说明声明一个新的类变量的时候赋值其实是拷贝构造函数在生效。
阅读全文
0 0
- C++ 深入理解系列-构造函数的技巧
- 构造函数的深入理解
- C++ 构造函数的深入理解
- 深入理解Android View的构造函数
- 深入理解JS的构造函数
- 【深入理解C++】从初始化列表和构造函数谈C++的初始化机制
- 【深入理解C++】从初始化列表和构造函数谈C++的初始化机制
- 【深入理解C++】从初始化列表和构造函数谈C++的初始化机制
- 【深入理解C++】从初始化列表和构造函数谈C++的初始化机制
- 深入理解各种构造函数
- 深入理解js构造函数
- 深入理解js构造函数
- 深入理解js构造函数
- C++ 构造函数深入理解
- 深入理解js构造函数
- 拷贝构造函数和赋值的深入理解
- C语言sprintf函数的深入理解
- 深入理解JavaScript系列(26):设计模式之构造函数模式
- maven怎么实现父pom的管理
- Java只用一套嵌套for循环输出菱形
- ThinkPHP开发指南-模型-高级模型之多数据库连接和切换
- Ubuntu下安装JDK
- 剑指offer—字符流中第一个不重复的字符
- C++ 深入理解系列-构造函数的技巧
- JPQL语言和Query接口
- GIT学习笔记
- 链接svn时候报错 Cannot negotiate authentication mechanism svn: Unable to connect to a repository at URL
- 理解Object.defineProperty的作用
- 摄影技巧
- 最全的ui Library
- linux cpu 频率
- jquery i18n(前端国际化)