在stxxl
常见问题解答中,我发现了这一点:
参数化 STXXL 容器
像 stxxl::vector 这样的 STXXL 容器类型只能使用 POD 的值类型进行参数化(即没有虚拟函数,没有用户定义的复制赋值/析构函数等)并且不包含对内部存储器的引用(包括指针) . 通常,“复杂”数据类型不满足此要求。
这就是为什么
stxxl::vector<std::vector<T> >
并且stxxl::vector<stxxl::vector<T> >
是无效的。如果合适,使用std::vector<stxxl::vector<T> >
或通过执行索引计算来模拟二维数组。
无法使用stxxl::vector<std::vector<T> >
是有道理的,因为stxxl
容器不会在容器调整大小时调用所包含元素的构造函数或析构函数。但是如何存储这样的结构:
struct S {
int* a;
}
如果我确实保证a
只要stxxl::vector<S>
实例存在,所指向的对象就有效,那么将其存储struct
到 a中有什么问题stxxl::vector<S>
?如果必须将 的特定实例S
移动到磁盘,则a
指针的值将写入磁盘。稍后,指针值被恢复,我可以使用它。显然,指针值也是机器相关和实例相关的,但即使我处理了指向对象的生命周期,这也是问题吗?我没有通过套接字发送序列化对象,也没有将序列化对象存储在数据库中以供以后使用。
我错过了什么吗?
编辑:有人提醒我stxxl
不要复制指针,因此当我稍后检索一个实例时,我可能会得到一个指向垃圾的指针struct S
。我知道。我将保证指针在程序的整个生命周期内都是有效的。