Ich habe eine Klasse durch Belichtung ist Schnittstelle Add-Funktion:Schnittstellenfunktion rvalue Zeiger immer Shared_ptr zu initialisieren
void AddObject(Object *o);
Innerhalb der Klasse halte ich die Objekte in set<shared_ptr<Object>>
. Da ich aus dem empfangenen Zeiger shared_ptr
erstellen werde, dachte ich, das Funktionsargument auf nur Rvalue-Zeiger zu beschränken, um sicherzustellen, dass der Benutzer den Zeiger nicht lösche, den ich verwende. Und so werde ich die Funktionsdeklaration ändern:
void AddObject(Object* &&o);
so eine typische Anwendung sind:
AddObject(new Object())
den Benutzer verhindert versehentlich Zeiger löschen Ich halte. Ich möchte nicht shared_ptr
in der Schnittstelle verwenden, weil der Benutzer nicht mit shared_ptr
vertraut ist. Glaubst du, dass mein Vorschlag eine gute Idee ist?
Was ist falsch mit einem 'std :: unique_ptr'? – AndyG
Nun die gleiche Frage gilt, wenn ich unique_ptr stattdessen verwendet –
Ich denke, "unique_ptr" macht es ein wenig offensichtlicher in der Schnittstelle, was Sie erwarten. Darüber hinaus geht die 'move'-Semantik bereits mit der Übergabe einher, also ist es natürlich,' std :: move' ein 'unique_ptr', aber wirklich seltsam zu' std :: move' einen rohen Pointer. – AndyG