[quote=引用 16 楼 ganpengjin1 的回复:] ls.这个Copy方法设置为静态是在是不妥当,为什么呢,因为首先静态是为了保存当前状态用的,而你的Copy中却重新复制了一份数据给外部对象,所以你的这个static在这里无任何作用,失去了它原有的意义。 其次,在你的Copy构造函数中,尽量少做转型动作,用多态方式都是可以搞定的。
C++提供了运行时动态机制,可以结合prototype模式,很好的完成这个需求。
ls.这个Copy方法设置为静态是在是不妥当,为什么呢,因为首先静态是为了保存当前状态用的,而你的Copy中却重新复制了一份数据给外部对象,所以你的这个static在这里无任何作用,失去了它原有的意义。 其次,在你的Copy构造函数中,尽量少做转型动作,用多态方式都是可以搞定的。
[quote=引用 9 楼 u010936098 的回复:] 既然是静态函数,那么大概就是clone的静态版本了。不过clone可以通过多态来对象类型,静态函数无法实现这一点,大概只能用dynamic_cast去多分支了。
[quote=引用 5 楼 combobox2013 的回复:] [quote=引用 4 楼 ganpengjin1 的回复:] 显然是要通过多态的方式来进行深浅拷贝用的
[quote=引用 10 楼 combobox2013 的回复:] [quote=引用 9 楼 u010936098 的回复:] 既然是静态函数,那么大概就是clone的静态版本了。不过clone可以通过多态来对象类型,静态函数无法实现这一点,大概只能用dynamic_cast去多分支了。
这个在游戏引擎中的类框架里面会很常见的 class CC_DLL CCCopying { public: virtual CCObject* copyWithZone(CCZone* pZone); }; 这个类是cocos2d-x引擎的最顶层的类,只是负责复制而已,在其下面有一个类CCObject: class CC_DLL CCObject : public CCCopying { public: // object id, CCScriptSupport need public m_uID unsigned int m_uID; // Lua reference id int m_nLuaID; protected: // count of refrence unsigned int m_uReference; // is the object autoreleased bool m_bManaged; public: CCObject(void); virtual ~CCObject(void); void release(void); void retain(void); CCObject* autorelease(void); CCObject* copy(void); bool isSingleRefrence(void); unsigned int retainCount(void); virtual bool isEqual(const CCObject* pObject); virtual void update(float dt) {CC_UNUSED_PARAM(dt);}; friend class CCAutoreleasePool; }; 上面这个类是控制引用计数的,我熟悉过的两个引擎都是这么实现的。
既然是静态函数,那么大概就是clone的静态版本了。不过clone可以通过多态来对象类型,静态函数无法实现这一点,大概只能用dynamic_cast去多分支了。
[quote=引用 4 楼 ganpengjin1 的回复:] 显然是要通过多态的方式来进行深浅拷贝用的
显然是要通过多态的方式来进行深浅拷贝用的
64,644
社区成员
250,475
社区内容
加载中
试试用AI创作助手写篇文章吧