C++ 中的复制控制-----指针控制

C++复制控制的函数有三种:拷贝构造函数,复制运算函数,析构函数;这三种函数可有编译器自动合成,如果需要详细理解可以参考:inside the C++ object model;对于一般的类型(指针除外),编译器合成的函数已经足够我们使用了。但是一涉及到指针,这些函数使用起来都不怎么好使了(这就是关于深拷贝和浅拷贝的问题了);

C++类常用的指针管理方式有三种:(1)指针成员采用常规的指针行为,就是在复制和赋值的时候,存在缺陷,并且可能导致悬垂指针(指向不存在的对象------被释放的内存),这种类不需要复制控制(2)类实现传说中的“智能指针”,指针所指的对象是共享的,此类能防止悬垂指针(3)每个对象所指的对象是唯一的,由每个类单独管理;

对于第一种,我也不在总结了,这些都是系统自动完成的。主要总结一下第三个,以前总是听说智能指针(就是在用com组建的时候),但是却不知道工作原理。智能指针就是在类内引入引用计数;看C++primer,上面用的是一个引用技术类,这样一个可以提高代码的重复利用。(本来我认为可以用一个静态变量就可以解决问题,但是仔细一想,如果这样实现的话,所有的对象只能引用一个对象。而用计数类则可以自由控制。引用计数类在文末)。第三个就是在类的复制和赋值函数中,为对象分配独立的内存。

class Count{

friend class Ptr;

int *p;

int use;

Count(int *p):ip(p),use(1){};

};

 

class Ptr{

public:

Ptr(int *p ,int i):count(new COunt(p),val(i)){};

Ptr(const Ptr &orig):ptr(orig.count),val(orig.val){++count->use;};

//其他的可以自己写

private:

Count * count;

int val;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值