簡體   English   中英

如何在 std::array (容器)中初始化指向 Object 的指針?

[英]How do I initialise a Pointer to a Object inside a std::array (container)?

我有這個數組:

std::array<dto_s, nQ> Q;

並且想要在 Q 中的對象上有另一個指針數組。(代表 DFA 的增量 function)

如何初始化數組?

我的問題是:數組中對象的數據類型是什么?

這不起作用:

std::array<dtos,nQ> deltafunction[nDelta];

如前所述,這些對象的類型是dto_s* (或dtos* ,您使用了兩種不同的拼寫)。 在您的初始化代碼中,您將std::array與 C 風格的 arrays ( [nDelta] )混合。 如果你想要一個指針數組,請使用

std::array<dto_s*,nDelta> deltafunction;

(假設nDelta是您需要的指針數)。 如果您需要一個指針數組(即Q中每個 object 的數組,您的代碼暗示),您不應混合使用這兩種類型的 arrays 而是使用

std::array<std::array<dto_s*, nDelta>, nQ> deltafunction

但是對於數組成員的指針,請格外小心。 如果同時復制 arrays,則Q副本的元素將位於新位置,但deltafunction副本中的指針仍將指向Q的元素。 這里有很高的錯誤風險。 我建議您不要使用指針作為Q元素的標識,而是通過它們在Q中的索引來引用它們。

特別是如果您在某個時候將代碼從std::array更改為std::vector是有風險的,因為只需添加一個std::vector就可以重新分配(換句話說,元素可以移動到新位置)新元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM