effective C++ 条款06如果你不想让编译器为你生成函数就应该明确拒绝
2013-04-27 21:04
459 查看
大千世界可定有独一无二的东西(对象),copy构造函数没存在的意义,所以我们就要防止编译器为我们生成copy构造函数,在条款05我们也曾经提过:当我们调用copy构造函数时如果没有定义,编译器会自动为我们生成,我们如何拒绝编译器的盛情呢?我们想到了把自己的类里,声明个private的copy构造函数和copy assignment,如下:
但是这又有一个问题,如果这两个函数不慎在成员函数和友员函数里被调用了,编译器不会捕捉到错误,相反连接器会发生抱怨。
如何将链接时的错误迁移到编译器呢,其实很简单我们只需要再为HomeForeSale声明一个基类,并把copy 构造函数和copy assignment 声明为private,并让HomeForeSale继承与它就行了,如下:
class HomeForeSale{ public: private: HomeForeSale(const HomeForeSale&); HomeForeSale& operator=(const HomeForeSale&);
但是这又有一个问题,如果这两个函数不慎在成员函数和友员函数里被调用了,编译器不会捕捉到错误,相反连接器会发生抱怨。
如何将链接时的错误迁移到编译器呢,其实很简单我们只需要再为HomeForeSale声明一个基类,并把copy 构造函数和copy assignment 声明为private,并让HomeForeSale继承与它就行了,如下:
class Uncopyable { protected: Uncopyable(){}; ~Uncopyable(){}; private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&); } class HomeForSale:private Uncopyable{ };
相关文章推荐
- 读书笔记《Effective c++》 条款06 若不想使用编译器自动生成的函数,就应该明确拒绝
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
- 【Effective c++】条款6:若不想使用编译器自动生成的函数就应该明确拒绝
- 《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 读书笔记《Effective C++》条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就应该明确拒绝
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- [Effective C++]条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++条款06解读 : 若不想使用编译器自动生成的函数, 就应该明确拒绝
- 条款6:如果不想使用编译器自动生成的函数,就应该明确的拒绝。
- Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
- 《Effect C++》学习------条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝.
- effective c++若不想使用编译器自动生成的函数,就应该明确拒绝
- 《Effective C++》Item6: 如果你不想使用编译器生成的函数,就该明确拒绝!