對於我並不想進入這裏的原因初始化C++結構,我有整合其他地方寫在我們的節目以最小的改變他們的代碼一些代碼。代碼必須創建一個結構作爲一個局部變量(在棧上)構造函數,然後將其分配給這樣的成員變量:堆上,而不是堆棧
struct S
{
// lots of real_T's and uint32_T's and structs and structs within structs
};
class C
{
private:
S s;
// among other members
};
C::C()
{
S tempS = {
// more than 52k lines of code!!!
};
s = tempS;
}
他們的代碼是從某種MATLAB模型的自動生成,當然,那就是在構造器的初始化器中超過52,000行代碼。 它會導致明顯的原因堆棧溢出,這是我試圖解決實際問題。
C類正在堆上創建(實際上它是從C派生的類的包裝),我的理解是這意味着C.s也在堆上。
請注意,我們目前使用Visual Studio 2010,但我們將移動到Visual Studio 2015年快(TM),這樣的解決方案,在任何工作都很好。
問題
有沒有辦法直接初始化C.S?
還是有辦法將其複製到C.S無需重寫52K行的初始化代碼之前,在堆上創建臨時工?
這些方式似乎都不適合我:http://en.cppreference.com/w/cpp/language/value_initialization。
(6)看起來像什麼,我想:
S * tempS = new S {
// more than 52k lines of code!!!
};
但它會導致編譯錯誤:「錯誤C2143:語法錯誤:缺少 ';'前 '{'」
會發生什麼事是你,而不是在成員初始化列表初始化's'直接? – NathanOliver
結構中的52k行?哇。但是你可以修改你的嘗試'S * tempS = new S {...'到'S * tempS = new S;'並且它們用'S-> var = ...初始化每個成員' –
這個「超過52k代碼行!!!「評論實際上讓我非常害怕。代碼味道,任何人? – roalz