Übergabe der Referenzoptionen in C ++

8

Ich möchte ein Objekt der Klasse A (nennen wir es a) durch Verweis (im weiten Sinn, dh entweder durch A & amp; oder durch A *) an den Konstruktor einer anderen Klasse B übergeben. Ich will kein 'a' innerhalb von B geändert werden ('a' ist nur lesbar und es ist groß, weshalb ich es als Referenz weitergeben möchte). Ich kenne zwei Möglichkeiten:

1) Übergeben Sie "a" als

%Vor%

2) Übergeben Sie "a" als

%Vor%

Der Nachteil von Option 1 ist, dass ich fälschlicherweise einen r-Wert übergeben kann. Der Nachteil von Option 2 ist, dass ich versehentlich einen Nullzeiger übergeben kann.

Meine Fragen sind: 1) Habe ich recht über die oben genannten Nachteile? 2) Gibt es einen anderen empfohlenen Weg, "a" als Referenz zu übergeben?

Ich habe die Antworten im folgenden Link gesehen. Aber ich bin neugierig, ob es andere Optionen als das gibt, was in dieser Frage gepostet wird. Gibt es Vorteile der Weitergabe Zeiger über die Übergabe durch Verweis in C ++?

    
Riju 29.10.2015, 18:35
quelle

3 Antworten

18

Übergeben von const A & .

Sie können die versehentliche Übergabe von rvalues ​​verhindern, indem Sie eine Rvalue-Überladung dieser Funktion = delete deklarieren. Zum Beispiel:

%Vor%     
emlai 29.10.2015, 18:41
quelle
4

Sehen Sie sich die Konstruktoren von std::reference_wrapper an: Ссылка

Es hat einen extra gelöschten Konstruktor, der den rvalue-Verweis akzeptiert. Wenn Sie also versuchen, einen rvalue zu übergeben, gewinnt dieser Konstruktor die Überladungsauflösung und Sie erhalten einen Fehler.

Sie können dasselbe tun: Deklarieren Sie sowohl const A& als auch A&& Konstruktoren, und löschen Sie letztere. Dann wird niemand in der Lage sein, einen rvalue zu übergeben.

    
Brian 29.10.2015 18:41
quelle
-3

Der Code:

%Vor%     
David Pulse 29.10.2015 18:49
quelle