2016-07-22 11 views
1

Say I den folgenden Durchlauf durch das Bezug habe:Ist Pass durch Verweis (ein Vektor von Zeigern auf Objekt) schneller als übergeben durch Wert?

foo(std::vector<someClass *> const &bar)

vergleicht wert

foo(std::vector<someClass *> bar)

I die gelesen passieren, wenn es um primitive Datentypen kommt, Pässe von Wert mit würde bevorzugt werden, während durch Verweis für große Daten wie Klasse oder Struktur übergeben. Und was ist mit Vektor von Zeigern auf Objekte?

+0

Wenn Sie einen Zeigerzeiger als Wert übergeben, wird zusätzlich zu einer Kopie der internen Vektorstruktur eine Kopie des Zeigerzeigers erstellt. – rcgldr

Antwort

3

Es ist einfach über die Anzahl der Bytes, die kopiert werden müssen.

Wenn Sie eine int übergeben, gibt es (wenn überhaupt) keinen großen Unterschied zwischen seiner Größe und seiner Zeigergröße. Da der Wert in der Regel bereits in einem Register ist, ist es etwas schneller.

Wenn Sie eine größere Struktur oder ein größeres Array übergeben, dauert das Kopieren des Inhalts (für den Wert) länger als das Kopieren des Mauszeigers (für by-ref).

Vektor der Zeiger auf Objekte wieder könnte viele Bytes sein, so ist die Referenz schneller.

Verwandte Themen