【发布时间】:2010-12-03 11:50:39
【问题描述】:
我正在为学校的一门课程开发一款游戏。其中一项任务是允许将游戏保存到文件中,然后从同一文件中加载游戏。
我遇到的问题是指针。我没有在堆栈上分配任何东西(例如,由于项目的所有权),所以所有类都有指向它们想要引用的任何内容的指针。
虽然这很容易解决(为每个对象分配一个 ID 并存储该 ID 而不是指针),但真正的问题来自多重继承。
我们以Actor类为例。它看起来像这样:class Actor : public Object, public ItemOwner 其中Object 是一个 Obj-C 风格的基类,它具有保留计数和释放、保留和自动释放方法。 ItemOwner 只是一个接口,它有一些方法,例如virtual bool add(Item *item) = 0;、virtual void remove(Item *item) = 0; 和virtual bool transfer_ownership(Item *item, ItemOwner *new_owner) = 0;
现在真正的问题来了,哪个类应该有 ID。 Item 有一个指向 ItemOwner 的指针,而 Room 有一个指向 Actor 的指针。 演员只能保存一次。
我考虑过为每个超类(Object、ItemOwner 等)分配 ID,但如果我有一个指向 Actor 的指针,那么该 Actor 是否总是与它包含的 Object 具有相同的地址 (Actor *foo = new Actor(); foo == (Object *)foo)?如果不是游戏中的每个班级都需要有一个 ID。
任何想法或建议将不胜感激。
【问题讨论】:
-
这里似乎不需要多重继承。
ItemOwner不也继承Object吗? -
好吧,不是真的,因为如果我调用 Actor::release() 它将被删除两次,而 ItemOwner 只是一个接口
-
如果可以的话,使用 boost 序列化。
-
@Nicklas:查看 s11n (s11n.net/s11n),据我所知,它执行深度序列化并自然处理对象的循环图。
标签: c++ serialization swizzling