| 操作 | JAVA | 使用Agent后的C++ | |
| 声明 | ObjectClass Instance | Agent<ObjectClass> Instance | |
| 创建 | Instance=new ObjectClass() | Instance=new Agent<ObjectClass> | |
| 数据访问 | Instance.Data | Instance().Data | |
| 方法调用 | Instance.Method() | Instance().Method() | |
| 复制 | 指针复制 | Instance1=Instance2 | |
| 内容复制 | 由类自身定义 | ||
| 比较 | 指针比较 | Instance1==Instance2 | |
| 内容比较 | 由类自身定义 | ||
| 销毁 | 不需要,由程序内部自动管理 | ||
| #ifndef OBJECT_AGENT_CLASS #define OBJECT_AGENT_CLASS #define null 0 template<class ObjectType> class Agent { int *Reference; static bool bNewOperation; protected: ObjectType *Marrow; void Finalize() { if (Reference) { (*Reference)--; if (Marrow) { if (*Reference<=0 && Marrow) { delete Marrow; delete Reference; } Marrow=null; } Reference=null; } } public: // constructors Agent() { if (bNewOperation) { Marrow=new ObjectType; Reference=new int; *Reference=1; bNewOperation=false; } else { Marrow=null; Reference=null; } } Agent(ObjectType obj) { Marrow=new ObjectType; Reference=new int; *Reference=1; *Marrow=obj; } // destructor ~Agent() { Finalize(); } // convertions operator ObjectType&() { return *Marrow; } // operators Agent<ObjectType>& operator=(Agent<ObjectType> obj) { Finalize(); Marrow=obj.Marrow; Reference=obj.Reference; (*Reference)++; return *this; } Agent<ObjectType>& operator=(Agent<ObjectType>* obj) { Finalize(); if (obj) { Marrow=obj->Marrow; Reference=obj->Reference; } return *this; } bool operator ==(Agent<ObjectType> obj) const { return Marrow==obj.Marrow; } bool operator !=(Agent<ObjectType> obj) const { return Marrow!=obj.Marrow; } ObjectType& operator ()() { return *Marrow; } void *operator new(size_t size) { bNewOperation=true; return new char[size]; } }; template<class ObjectType> bool Agent<ObjectType>::bNewOperation=false; #endif |