c++采用以下三种方式管理指针成员:
1.指针成员采取常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。
2.类可以实现所谓的“智能指针”。指针所指向的对象是共享的,但类能够防止悬垂指针。
3.类采取值型行为。指针所指向的对象是唯一的,由每个类对象独立管理。
下面给出“智能指针”的实现:
#include <iostream>
using namespace std;
class Has_Ptr;
//private类,只有HasPtr能访问
class U_Ptr {
friend class HasPtr;
int *ip;
size_t use;
U_Ptr(int *p):ip(p), use(1) {}
~U_Ptr() {delete ip;}
};
class HasPtr {
public:
HasPtr(int *p, int i):ptr(new U_Ptr(p)), val(i) {}
//拷贝构造函数,这时两个对象的指针应该相同
HasPtr(const HasPtr &has) {
has.ptr->use++;
ptr = has.ptr;
val = has.val;
}
//重载赋值操作符
HasPtr& operator=(const HasPtr& has) {
if(--ptr->use) delete ptr;
has.ptr->use++;
ptr = has.ptr;
val = has.val;
return *this;
}
~HasPtr() {
if(--ptr->use) delete ptr;
}
int *getPtr() {return ptr->ip;}
int getVal() {return val;}
void setPtr(int *p) {ptr->ip = p;}
void setVal(int i) {val = i;}
private:
U_Ptr *ptr;
int val;
};
int main()
{
return 0;
}
总结:其他两种的实现比较简单。具体的解释还是参考c++ primer第四版的13.5节。