我现在拥有的是一个小型库,可以加载,保存对象图,管理对象的生命周期,GC未使用的对象。它使用boost.serialization
Employee
中的键可能会变为无效。map<Key, ObjectRef>
是侵入式共享指针)。ObjectRef
的过程中(ar >> _some_objects
是类型为_some_objects
的STL容器)如果密钥无效,ObjectRef的析构函数将通过std::map<Key, ObjectRef>
释放其底层对象。只是因为键变得相等而且std :: map不能保持相等的键。Object::release
访问某些服务(将对象添加到object-destroy-queue for ex。),但尚未准备好使用,因为反序列化尚未完成。整个问题是低级反序列化调用这样的高级用户代码是不好的!```
Object::release
```
如何防止低级代码触发高级别调用?可以调用void SomeClass::load(Archive& ar, int version) {
// _some_objects is std::map<Key, ObjectRef>
ar >> _some_objects;
}
void Object::release() {
// also accesses some services (something like destroy queue)
// which aren't ready to use as de-serialization is not complete
}
,但不能在整个系统处于某种不一致状态时调用。感谢
Object::release
访问任何内容,或以某种方式延迟通话