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;
}