包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针的地址,而不会复制指针指向的对象。
将一个指针复制到另一个指针时,两个指针指向同一个对象,此时可能使用任一指针改变这一对象。类似的,很可能一个指针删除了一对象时,另一指针的用户还认为该对象仍然存在。
一个带指针成员的简单类:
//class that has a pointer member that behave like a plain pointer
class HasPtr
{
public:
//copy of the values we're given
HasPtr(int *p, int i):ptr(p), val(i) {}
//const members to return the value of the indicated data member
int *get_ptr() const { return ptr;}
int get_int() const { return val;}
//non const member to change the indicated data member
void set_ptr(int *p) { ptr = p; }
void set_int(int i) { val = i; }
//return or change the value pointed to, so ok for const objects
int get_ptr_val() const { return *ptr; }
void set_ptr_val(int val) const { *ptr = val; }
private:
int *ptr;
int val;
};