-2

我目前有一个非常大的结构 >13MB(它必须保持这样,因为我不能有指针)。我的问题是如何将它存储到一个类中。

如果它是课程的一部分,我会得到stackoverflow。如果我使用指针,问题就解决了,直到我需要开始复制类......然后地狱开始了。(因为班级有很多成员)。

我尝试了 STL 向量和数组,但我仍然得到了 stackoverflow。是否有任何不将结构放入堆栈但直接分配内存的 STL 容器?

这样我就可以把所有事情都做好。

谢谢。

更新:

示例代码:

//HEADER
#include <vector>
struct BigStruct { //This is untouchable or divisible into an array of arrays
    char a[1000];
    int b[1000][1000];
    long c[1000000];
    // etc...
};

class Foo
{
    std::vector<BigStruct> a; //It has to be here since is related to this instance of the class

public:
    Foo();
    //All the other funcs and method
    // ...

    //All the other variables are from STL
    // ...
};

//CPP
Foo::Foo(){
 a.resize(1);
}
4

1 回答 1

0

我只是在回答我自己的问题。调用resize()std::vector 时,会在堆栈中创建一个 BigStruct 类型的元素,然后将其复制指定的次数。

这种行为可以通过像这样在向量中创建元素来避免:

Foo::Foo(){
 BigStruct * temp = new BigStruct;
 a.clear();
 a.push_back(*temp); //Element is reserved and copied directly from temp.
 delete temp;
}

这完全解决了堆栈问题,并允许父类的可移植性(复制,移动销毁)。

于 2013-08-08T22:01:32.070 回答