c++中的不可复制类型

在C++编程中,当对象涉及唯一资源管理时,如线程、互斥锁或文件流,通常需要防止对象的拷贝复制以避免资源混乱。通过将构造函数设为protected或private,或者使用boost的nocopyable,可以实现这一目标。如果类包含不可拷贝的成员,该类也将自动不可拷贝。避免这种情况的方法是使用指针或智能指针来管理资源,确保单一对象对资源的独占。
摘要由CSDN通过智能技术生成

在c++中,有的时候需要限制某种类型的对象的拷贝复制,例如std::thread, std::metux,std::ifstream, std::ofstream等类型。

什么时候需要去如此设计该类型呢?实际上就是如果一个对象涉及到一种唯一资源的管理时,我们需要设计为该类型,例如前面所举例子: 分别管理线程资源,互斥区和文件;如果我们设计为可以随意拷贝复制的,那么会导致存在多个物体同时管理一个资源,必然导致混乱。

那么如何设计呢?通常是将构造函数设计为protected或private即可。如果使用boost, 则可以直接继承boost::nocopyable类即可;

namespace noncopyable_  // protection from unintended ADL
{
	class noncopyable 
	{ 
	protected: 
		noncopyable() {} 
		~noncopyable() {} 
	
	private: 
		// emphasize the following members are private 
		noncopyable( const noncopyable& ); 
		noncopyable& operator=( const noncopyable& ); 
	};
	
	typedef noncopyable_::noncopyable noncopyable;
}; 

同时,需要注意,如果一个类中包含不可拷贝复制的对象实例时,该类自然也是不可拷贝复制的。

如果避免呢?实际上只要使用指针或共享指针或唯一指针即可避免,同时,可以避免多个对象实例管理相同资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值