C++ 基本-共享到值向量向量的ptr

C++ 基本-共享到值向量向量的ptr,c++,pointers,vector,c++11,shared-ptr,C++,Pointers,Vector,C++11,Shared Ptr,我有一个只包含几个整数的物体向量的向量 外部向量包含数百个向量,这些向量包含数千到几十万个数据对象 我正在使用一个包含很多共享内容的库,所以这就是我将要使用的 如何存储这些数据,以便将数据存储到堆中 std::vector<std::shared_ptr<std::vector<Data>>> std::vector<std::vector<std::shared_ptr<Data>>> std::vector 向量 等

我有一个只包含几个整数的物体向量的向量

外部向量包含数百个向量,这些向量包含数千到几十万个数据对象

我正在使用一个包含很多共享内容的库,所以这就是我将要使用的

如何存储这些数据,以便将数据存储到堆中

std::vector<std::shared_ptr<std::vector<Data>>>
std::vector<std::vector<std::shared_ptr<Data>>>
std::vector 向量 等


<正确的处理方法是什么?

在堆中存储一些东西,在C++中使用<代码>新< /代码>,或者在C中使用<代码> Malc C/代码>。尽管我相信vector实现确实使用堆,因为vector是一个动态大小的容器。所以在现实中,如果向向量添加元素,elemenet已经在堆上,除非它是指针,在这种情况下,只有指针在堆上,而不是@Oswald指出的指针指向的元素

如何存储这些数据,以便将数据存储到堆中

std::vector<std::shared_ptr<std::vector<Data>>>
std::vector<std::vector<std::shared_ptr<Data>>>
如果您需要引用语义,即如果您需要容器中的值成为代码其他部分引用的值的别名,并且在代码的一部分中所做的修改对于包含修改后的
数据
对象别名的其他部分应该是可见的,我认为这是正确的容器定义:

std::vector<std::vector<std::shared_ptr<Data>>>
这将简化您的代码,并且您还将摆脱
共享的\u ptr
内存和运行时开销


是否需要引用语义是只有作为应用程序设计者的您才能知道的。您提供的信息不足以让我毫无疑问地告诉您,但希望这个答案能给您一个提示,告诉您应该问自己哪些问题,以及在每种情况下的答案是什么。

仅包含几个整数部分与“数千到几十万个数据对象”有点冲突每个“类数据”对象包含4维整数。存在跨越多个时间点的多个数据实例。有什么不对劲吗?哦,好吧,我明白了。谢谢:)所以除了包装器之外,向量的共享ptr是不必要的。知道这一点非常有帮助。在决定是否在堆上存储向量元素时,向量通常不会区分指针和非指针,但指针可以是指向堆栈或堆的指针,因此,当添加到向量时,它可能不在堆上。但正如您指出的@oswald,指针本身将位于堆上。如果指针是指向堆栈对象的指针,并将其添加到向量,则将指针添加到向量,而不是指向的对象。