gpt4 book ai didi

c++ - 为什么存储指向内部存储器的普通指针的结构不能存储在 stxxl 容器中?

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:22 25 4
gpt4 key购买 nike

stxxl常见问题解答,我发现了这个:

Parameterizing STXXL Containers

STXXL container types like stxxl::vector can be parameterized only with a value type that is a POD (i.e. no virtual functions, no user-defined copy assignment/destructor, etc.) and does not contain references (including pointers) to internal memory. Usually, "complex" data types do not satisfy this requirements.

This is why stxxl::vector<std::vector<T> > and stxxl::vector<stxxl::vector<T> > are invalid. If appropriate, use std::vector<stxxl::vector<T> >, or emulate a two-dimensional array by doing index calculation.

无法使用stxxl::vector<std::vector<T> >非常有道理,因为 stxxl容器在调整容器大小时不会调用所包含元素的构造函数或析构函数。但是如何存储这样的结构:

struct S {
int* a;
}

如果我保证 a 指向的对象只要 stxxl::vector<S> 有效实例存在,存储这个 struct 有什么问题?进入stxxl::vector<S> ?如果 S 的特定实例必须移动到磁盘,然后 a 的值指针写在磁盘上。稍后,指针值被恢复,我可以使用它了。显然,指针值也依赖于机器和实例,但即使我处理了指向对象的生命周期,这还是个问题吗?我没有通过套接字发送序列化对象,也没有将序列化对象存储在数据库中供以后使用。

我错过了什么吗?

编辑:有人提醒我stxxl不复制指针对象,因此当我检索 struct S 的实例时,我可能会得到一个指向垃圾的指针稍后的。我知道。我将保证指针对象在程序的整个生命周期内有效。

最佳答案

(including pointers) to internal memory

这意味着指向结构成员的指针,或者指向容器管理的内存的指针。例如。你有

struct Foo {
int *a;
int b;
};

Foo f;
f.a = &f.b

由于 f.a 现在指向结构的一个成员,并且可以复制该结构,因此指针可能无效。类似地,如果指针指向容器管理的任何其他结构 Foo - 也可以四处移动。

如果您只有一个指针,并管理它指向的内容,您应该没问题。

关于c++ - 为什么存储指向内部存储器的普通指针的结构不能存储在 stxxl 容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21990478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com