我在做编译器项目的时候, 我们采用c++语言,但要使用多态的性质,一是用引用,二是用指针。可是引用不够灵活,指针还具有内存管理问题。所以SmartPtr是一个必然的选择,可我发现通常的SmartPtr不能够支持多态,原因是编译器只能进行一次类型转换,如SmartPtr->裸指针,但裸指针到他的基类指针不会自动转换。本篇将实现一个支持多态的智能指针,没什么技术含量,大家不要见笑。
原理:既然SmartPtr->裸指针->基类指针的自动转换不可能,那么变一个方式
SmartPtr<Derived> -> SmartPtr<Base> -> Base.这就要求SmartPtr<Derived>与SmartPtr<Base>之间的继承结构要与Derived与Base之间的继承结构相同。好,让我们写一个吧。
//File:SmartPtr.h
#ifndef CMM_TOOL_TSMART_PTR_H_
#define CMM_TOOL_TSMART_PTR_H_
//所有类的基类,这个类只是为了统一智能指针的用法,下面会看到
class GlobalBaseObject
{
public:
virtual ~GlobalBaseObject()
{
}
};
//是所有智能指针的基类,提供了一些方法如下:
class GlobalBaseObjectPtr
{
protected:
//释放智能指针
void _Release()
{
if(pOri && --*pRef == 0){