要求在堆中建立对象
方法:禁止使用隐式的析构函数,引进专用的伪析构函数,用来访问真正的析构函数
弊端:该类不能被继承和被包含
解决方案:
-
析构函数声明为protected;
-
包含UPNumber对象的类可以修改为包含指向UPNumber的指针
class UPNumber {
public:
UPNumber() {}
UPNumber(int initValue) {}
UPNumber(const UPNumber& rhs) {}
void destroy() const { delete this; }
protected:
~UPNumber() {}
private:
int value;
};
class NonNegativeUPNumber : public UPNumber {};
class Asset {
public:
Asset(int initValue) : value(new UPNumber(initValue)) {}
~Asset() { value->destroy(); }
private:
UPNumber *value;
};