0
我有以下類。std向量,複製數據結構
class Row
{
Table* parent_table;
Row(Table* construct);
}
class Table
{
std::vector<Row>;
}
我創建std::vector<Table> test;
,並且在一個循環中創建表的對象和把它們放回至測試向量。問題是我在每一行中丟失了Table *。我需要指針,所以當我遍歷我的行時,我知道它屬於哪個表。
有沒有辦法強制std :: vector,而不是複製對象時,他們被推回來?
」問題是我失去了每行內的表格*。「你能詳細說明一下,這是什麼意思?聽起來像是應該由合適的拷貝構造函數來照顧的東西。 – jrok 2013-03-13 13:56:05
您是否知道'std :: vector
回答
代替存儲在
std::vector
,商店std::unique_ptr<Row>
或std::shared_ptr<Row>
。這些對於這類事情來說已經足夠了(有更復雜的方法可以處理這個問題,例如存儲原始指針(複雜維護)或者滾動自己的類,或者使用自定義語義編寫自己的智能指針)。unique_ptr
只支持移動,因此避免了您的複製問題。shared_ptr
反而支持共享所有權,這可能是您不需要的東西。我建議使用unique_ptr
。來源
2013-03-13 13:53:13 Yakk
Yeap使用共享指針更好選項 – 2013-03-13 13:53:53
通過引用或指針推送元素。您正在推送副本,以便複製元素是C++所能做的。我個人建議你使用像這樣的指針向量:
std::vector<Row*>
實際上,一個更安全和更清潔的方法是存儲shared_ptr -s而不是裸指針,這樣就不必處理內存管理。喜歡的東西:
std::vector<std::shared_ptr<Row> >
來源
2013-03-13 13:51:12
在這種情況下,最簡單的解決辦法可能是一個迭代器存儲到您的表:
來源
2013-03-13 13:54:22 JSQuareD
'std :: vector
啊,你是對的......即使push_back無效迭代器,如果重新分配發生。謝謝你的提示 – JSQuareD 2013-03-13 13:57:34
你問兩個不相關的問題。請不要在一個帖子中這樣做。一個後一個問題。這使得回答更容易。
第二:
已被其他人回答。
FIRST:
很可能您的ROW不包含對包含它的表的任何反向引用。這樣,當你傳遞行向量或行本身時,就會丟失關於誰擁有它的信息。您必須將
table* owner
以及table* owner
之間的一行連同table* owner
一起傳遞給行,或者您必須使行更加智能並強制所有行包含table* owner
(也就是說,讓行包含對所有者的反向引用)當然,反向引用可能是任何形狀。它不需要是一個指針。您可以通過
Table&
,shared_ptr<Table>
,string tablename
或任何可以幫助您直接或通過某個經理訪問表的內容。重要的是,Row必須包含它,或者它必須單獨傳遞,但與行一起傳遞。 「來源
2013-03-13 13:57:08 quetzalcoatl
相關問題