Rückgabe eines std :: vector - right-Ansatzes

8

Ich versuche, eine Klassenmethode zu erstellen, die einen std :: vector zurückgibt, und bin ein wenig verwirrt über die beste Methode, dies zu tun.

Der Ansatz, den ich verwendet habe, ist die folgende Methode zu definieren:

%Vor%

und in der Methode, einen neuen std :: vector zuweisen, den ich mit Daten fülle. Ich gebe einen Zeiger darauf zurück, dh.

%Vor%

(_ itMap ist ein klassenspezifischer Iterator).

In meiner main.cpp habe ich folgendes gemacht:

%Vor%

Ich weiß, dass ich mit diesem Ansatz einen freien Zeiger bekomme, es sei denn, ich lösche den Zeiger im main.cpp-Code, also ist es schon ein bisschen "gefährlich". Was ist der beste Weg, um einen neuen std :: vector von einer Klassenmethode zurückzugeben?

Danke Leute Pete

    
Pete855217 19.04.2013, 13:54
quelle

3 Antworten

15

Der beste Weg ist, nach Wert zurückzugeben:

%Vor%

Dann würden Sie die Funktion wie folgt verwenden:

%Vor%

Der Compiler wird wahrscheinlich RVO verwenden und keine Kopien ausführen. Wenn Sie C ++ 11 verwenden, stellt die Verschieben-Semantik sicher, dass keine Kopien ausgeführt werden.

    
mfontanini 19.04.2013, 13:54
quelle
4

Rückgabewert

%Vor%

Wenn Sie jedoch mit dem Zeiger zurückkehren möchten, können Sie Smartpointer verwenden:

%Vor%     
deepmax 19.04.2013 13:57
quelle
4

Wenn Sie vermeiden wollen, dass Kopien / Dangle-Zeiger / ... sind, geben Sie einfach Ihre std::vector als Referenz an die Methode

weiter %Vor%

Sie müssen es dann vorher definieren:

%Vor%     
Dr_Sam 19.04.2013 14:18
quelle

Tags und Links