在容器中同时存放基类和代理类会存在问题 会缺失数据
容器中存放基类的指针 1、内存管理的负担 2、 要操作元素,必须知道对象的静态类型
copy clone诞生
基类中诞生一个纯虚函数和虚析构函数
定义一个行为与父类对象相似,而又潜在的表示所有继承自父类对象的类,该类的对象就是代理。
复制代理就会复制相应的对象,给代理赋新值也会删除旧对象,再复制新对象。
代理类中有一个私有的父类型的指针;代理不会继承,是一个第三者。
考虑到父类含有纯虚函数,引入空代理的概念。
虚拟调用
非0检测
赋值操作符的检查
class Vehicle
{
public:
virtual double weight() const = 0;
virtual void start() = 0;
virtual Vehicle* copy() const = 0;
virtual ~Vehicle() {}
};
Vehicle* Truck::copy() const
{
return new Truck(*this);
}
class VehicleSurrogate
{
public:
VehicleSurrogate();
VehicleSurrogate(const Vehicle&);
VehicleSurrogate ();
VehicleSurrogate(const VehicleSurrogate &); vp(入参.vp ? 入参->copy:0)
VehicleSurrogate& operator=(const VehicleSurrogate&); if(this != 入参)
private:
Vehicle *vp;
}