浅析boost库之noncopyable
2012-01-12 13:46
447 查看
浅析boost库之noncopyable
1.介绍
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
通常编译器都是程序员的好朋友,但并不总是。它的好处之一在于它会自动为我们提供复制构造函数和赋值操作符,如果我们决定不自己动手去做的话。这也可能会导致一些不愉快的惊讶,如果这个类本身就不想被复制(或被赋值)。如果真是这样,我们就需要明确地告诉这个类的使用者复制构造以及赋值是被禁止的。我不是说在代码中进行注释说明,而是说要禁止对复制构造函数以及赋值操作符的访问。幸运的是,当类带有不能复制或不能赋值的基类或成员函数时,编译器生成的复制构造函数及赋值操作符就不能使用。boost::noncopyable 的工作原理就是禁止访问它的复制构造函数和赋值操作符,然后使用它作为基类。
2.使用
在代码中你可以这样使用:
class test_classs:noncopyable { .... } 即可。
上述代码是 class test_classs:private noncopyable { .... } 的简写形式,
代码中如果出现
test_class a;
test_class b(a); //编译报错
因为在test_class本身没有拷贝构造函数时,b(a)试图调用基类 noncopyable( const noncopyable& );,但被声明为private,导致报错。
1.介绍
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
通常编译器都是程序员的好朋友,但并不总是。它的好处之一在于它会自动为我们提供复制构造函数和赋值操作符,如果我们决定不自己动手去做的话。这也可能会导致一些不愉快的惊讶,如果这个类本身就不想被复制(或被赋值)。如果真是这样,我们就需要明确地告诉这个类的使用者复制构造以及赋值是被禁止的。我不是说在代码中进行注释说明,而是说要禁止对复制构造函数以及赋值操作符的访问。幸运的是,当类带有不能复制或不能赋值的基类或成员函数时,编译器生成的复制构造函数及赋值操作符就不能使用。boost::noncopyable 的工作原理就是禁止访问它的复制构造函数和赋值操作符,然后使用它作为基类。
2.使用
在代码中你可以这样使用:
class test_classs:noncopyable { .... } 即可。
上述代码是 class test_classs:private noncopyable { .... } 的简写形式,
代码中如果出现
test_class a;
test_class b(a); //编译报错
因为在test_class本身没有拷贝构造函数时,b(a)试图调用基类 noncopyable( const noncopyable& );,但被声明为private,导致报错。
相关文章推荐
- boost库asio详解6——boost::asio::error的用法浅析
- boost库asio详解6——boost::asio::error的用法浅析
- 浅析boost库之noncopyable
- Boost库学习笔记-----------实用工具之禁止复制 noncopyable
- 【Boost】boost库asio详解6——boost::asio::error的用法浅析
- 【Boost】boost库asio详解6——boost::asio::error的用法浅析
- boost库学习之 noncopyable
- 基于WF的意见征集1(浅析)
- 怎么学习oracle浅析
- 浅析webapp框架AngularUI的demo
- 系统负载能力浅析
- LinkedList的实现原理浅析
- 浅析C++中的this指针
- 浅析Hibernate映射(二)——关系映射(1)
- Android5.0通知变化浅析
- 浅析RxJava处理复杂表单验证问题的方法
- HashSet的实现原理浅析
- 浅析AOE 技术
- 浅析HTML5在移动应用开发中的使用
- java判断字符串String是否为空问题浅析