2017-10-19 2 views
2

Ich würde gerne fragen, ob dies eine gute Praxis ist. Lassen Sie sich dieses Szenario übernehmen:Verwenden roher Zeiger aus Vektor von unique_ptr als ID zum Sortieren

std::vector<unique_ptr<Model>> data; 

Ist es sicher, mit den rohen Zeigern aus diesem Vektor (Rohzeiger von jedem unique_ptr im Vektor) zu arbeiten? Ich verstehe, dass der Vektor die Daten neu zuordnen kann, wenn der reservierte Speicherplatz überschritten wird, aber das würde nur die Adressen von unique_ptr beeinflussen, während der innere rohe Zeiger garantiert bleibt, das richtige zu bleiben?

Ist es daher sicher, die Modelle zu identifizieren, indem Sie diese unformatierten Zeiger verwenden, anstatt einige ID-Member hinzuzufügen?

Konkreter, ist es in Ordnung, diese rohen Zeiger als Schlüssel in einer Karte zu verwenden? Ich muss Objekte, die einen Modellzeiger (als Mitglied) enthalten, aus dem Vektor sortieren und Gruppen von Objekten mit denselben Modellen erstellen.

Ich weiß, dass ich einige Handles wie Indizes in den Vektor oder eindeutige IDs verwenden kann, aber das wäre wahrscheinlich ein nutzloser Overhead. Der Grund, warum ich frage ist, dass je nach Zeiger Adresse für mich irgendwie unsicher ist :-)

+1

Ja, es ist sicher. Selbst wenn der Vektor neu zugeordnet wird, ändern sich die darunterliegenden Zeiger innerhalb der unique_ptrs nicht. – CoryKramer

+0

@CoryKramer Thak du! – Hitokage

Antwort

3

Yep! Das ist in Ordnung :)

Stellen Sie einfach sicher, dass die Objekte ihre Zeiger wie üblich überdauern.

+0

Danke! Ja, die Lebensdauer ist in Ordnung. Es fühlte sich irgendwie seltsam an, solche Hinweise zu verwenden!^_ ^ – Hitokage

Verwandte Themen