求教,使用句柄类实现的智能指针
使用句柄类来实现智能指针,细节如下:
为了避免上面方案中每个使用指针的类自己去控制引用计数,可以用一个类把指针封装起来。封装好后,这个类对象可以出现在用户类使用指针的任何地方,表现为一个指针的行为。我们可以像指针一样使用它,而不用担心普通成员指针所带来的问题,我们把这样的类叫句柄类。在封装句柄类时,需要申请一个动态分配的引用计数空间,指针与引用计数分开存储。实现示例如下:
class Point //基础对象类
{
public:
Point(int xVal = 0, int yVal = 0):x(xVal),y(yVal) { }
int getX() const { return x; }
int getY() const { return y; }
void setX(int xVal) { x = xVal; }
void setY(int yVal) { y = yVal; }
public:
virtual Point* clone() const { //虚函数,为了实现让句柄类在不知道对象的确切类型的情况下分配已知对象的新副本
return new Point(*this);
}
private:
int x,y;
};
class D3Point : public Point //派生类
{
public:
D3Point(int xVal, int yVal, int zVal):Point(xVal, yVal), z(zVal) { }
int getZ() const { return z; }
void setZ(int zVal) { z = zVal; }
public:
D3Point* clone() const { //虚函数,为了实现让句柄类在不知道对象的确切类型的情况下分配已知对象的新副本
return new D3Point(*this); //看不懂这句,new的这种用法不太明白,高人可否给解释下
}
private:
int z;
};
不太懂的是这个函数:
D3Point* clone() const {
return new D3Point(*this); //看不懂这句,D3Point没有定义这样的构造函数哦,高人可否指点下
}
多谢!
[解决办法]
就是个拷贝构造函数啊,你不显示声明,编译器会默认帮你构造一个。
[解决办法]
是编译器自动生成的, 你说的系统不知是指的什么系统, 显然操作系统是不会做这些事的. 如果是指编译系统, 那就是.