两种关闭拷贝构造的手法

两种关闭拷贝构造的手法:

1.宏:
(来自chrome)
// 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&)

sample:
class CTest
{
public:
    CTest();
 virtual ~CTest();
 
private:
 DISALLOW_COPY_AND_ASSIGN(CTest);
};

2.继承的手法
(来自boost)
//  Private copy constructor and copy assignment ensure classes derived from
//  class noncopyable cannot be copied.

//  Contributed by Dave Abrahams

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

typedef noncopyable_::noncopyable noncopyable;

sample:
class CTest : noncopyable
{
public:
    CTest();
 virtual ~CTest();
};

 

说说我自己的看法:
曾经也写过一个类似boost这个小工具基类,但是现在是尽量避免使用继承的;应为难以预测到以后这个class
是不是一定就不能拷贝。而且我比较追求完美,会给积累加上虚析构,还有就是operator = 也会弄成虚的,,,
问题很多,应为刚刚设计的时候就需要决定他的命运,nonecopyable.但是往往中途会发现,应该赋予他copy的能
力,,,

后来自己的代码中都是手工编写代码来关闭拷贝;

进来想了很多东西,觉得抽象是需要经验积累的,在固定的领域有了积累才能不断调整出漂亮的业务模型。如果
以上手就开始高度抽象,接下来肯定是无尽的修改;而换一种思路,在最底层做原子级的抽象,业务会更好,原子
是稳定的,在原子上在做出稍微高一点的抽象这样修改的代价就会小很多。应为原子级别上的工作结果得到保存。
另外,最为一个IT从业者,必须要明白,代码复用不是目的而是结果。

大量的重构才能带来一个可复用的漂亮的作品;应为他是进过千锤百炼的,切合需求的。所以他是可以复用的。
只有原子画才能达到这个目的。对于一个成熟的行业,所有的流程都是按部就班,它的原子划分可以很大。
但是一个好习惯是,尽可能更加的细化,

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值