2017-01-24 3 views
2

Wenn Sie eine Funktion aus einer externen Bibliothek verwenden, ist es sicher, Zeiger in const-Referenzen "willkürlich" zu dereferenzieren?Konvertieren von Zeigern in (const) Referenzen

SomeType const& obj = *LIB_CreateSomething(); 

Ist dies universell sicher/schlau zu tun?
Noch wichtiger, gibt es wirklich einen guten Grund, dies zu tun mit einem const Zeiger anders als rohe Zeiger in C++ "verpönt" werden?

+0

Überprüfen Sie zuerst, ob der Zeiger nicht null ist. –

+0

Was erhoffen Sie sich damit? –

+0

@MikelF Weiß nicht, meine Frage ist wirklich * das * grundlegend. – UghSegment

Antwort

1

Es ist sicherlich nicht allgemein eine gute Idee oder im Allgemeinen eine gute Idee überhaupt. Wenn eine Funktion einen Zeiger zurückgibt, insbesondere wenn sie etwas wie CreateX aufgerufen hat, besteht eine gute Chance, dass Sie die Lebensdauer des Objekts verwalten müssen, auf das der Zeiger zeigt. Sie können dies nicht über eine Referenz tun, aber Sie können über einen intelligenten Zeiger.

Im Allgemeinen möchten Sie keine Referenzvariablen erstellen. Referenzen in C++ sollen hauptsächlich als Funktionsparameter und Rückgabewerte verwendet werden.

0

Was Sie wirklich wollen, ist etwas wie das Folgende (siehe Code). Const-Objekte werden bei der Erstellung initialisiert. Einige Compiler verstehen, was Sie zu tun versuchen und beschweren sich nicht über diese Form der Zuweisung.

 

    SomeType const& obj(*LIB_CreateSomething()); 

Normalerweise in C++ würden Sie das jedoch nicht tun.

Ein Grund ist, dass "rohe" (nackte) Zeiger nur dann wirklich verpönt sind, wenn Sie der Besitzer sind. Wenn es Ihnen nicht gehört, dann ist stilistisch nichts falsch daran, einen Zeiger zu verwenden.

Eine andere ist, dass der Zeiger Null sein kann und ein direkter Verweis auf einen Verweis den Verweis unbrauchbar macht.

Wie in einem anderen Kommentar erwähnt, könnten Sie in der Tat der Besitzer sein und in diesem Fall würde man erwarten, dass Sie den Speicher verwalten. Das kann man nicht mit einer Referenz machen.

Verwandte Themen