Witzig, ich habe gerade eine Frage zu C ++ beantwortet und über Zeiger gesprochen.
In der Kurzversion benötigen Sie NIEMALS Zeiger, es sei denn, 1) die Bibliothek, die Sie verwenden, erzwingt Sie. 2) Sie benötigen eine nullfähige Referenz.
Wenn Sie ein Array, eine Liste, eine Zeichenfolge usw. benötigen, müssen Sie es nur auf dem Stapel haben und ein stl-Objekt verwenden. Das Zurückgeben oder Übergeben von STL-Objekten ist schnell (ungeprüfte Tatsache), da sie internen Code haben, der einen Zeiger anstelle eines Objekts kopiert und die Daten nur dann kopiert, wenn Sie darauf schreiben. Dies ist normales C ++, nicht einmal das neue C ++ 11, das es Bibliotheksschreibern leichter machen wird.
Ihre Frage könnte an dieser Stelle beantwortet werden
Wenn Sie einen Zeiger verwenden, stellen Sie sicher, dass er sich in einer dieser beiden Bedingungen befindet. 1) Sie übergeben eine Eingabe, die möglicherweise nullwertfähig ist. Ein Beispiel ist ein optionaler Dateiname. 2) Wenn Sie Eigentum verschenken möchten. Als ob Sie den Zeiger übergeben oder zurückgeben, haben Sie KEINE Kopien davon übrig, noch verwenden Sie den Zeiger, den Sie verschenken
ptr=blah; func(ptr); //never use ptr again for here on out.
Aber ich habe seit langer Zeit keine Zeiger oder intelligenten Zeiger mehr verwendet und meine Anwendung profiliert. Es läuft sehr schnell.
ZUSÄTZLICHER HINWEIS: Ich stelle fest, dass ich meine eigenen Strukturen schreibe und sie weitergebe. Wie mache ich das, ohne Zeiger zu verwenden? Es ist kein STL-Container, daher ist das Vorbeifahren an ref langsam. Ich lade immer meine Datenliste / deques / maps und so. Ich kann mich nicht erinnern, Gegenstände zurückgegeben zu haben, es sei denn, es handelte sich um eine Liste / Karte. Nicht einmal eine Schnur. Ich habe mir den Code für einzelne Objekte angesehen und dabei { MyStruct v; func(v, someinput); ... } void func(MyStruct&v, const D&someinput) { fillV; }
festgestellt, dass ich so etwas mache, dass ich so ziemlich alle Objekte zurückgebe (mehrere) oder eine Referenz vorbelege / übergebe, um sie zu füllen (einzelne).
Wenn Sie nun schreiben, dass Sie eine eigene Deque, Map usw. sind, müssen Sie Zeiger verwenden. Das musst du aber nicht. Lassen Sie STL und möglicherweise steigern Sie die Sorge darüber. Sie müssen nur Daten und die Lösungen schreiben. Keine Container, um sie aufzunehmen;)
Ich hoffe, Sie verwenden jetzt niemals Zeiger: D. Viel Glück beim Umgang mit Bibliotheken, die Sie dazu zwingen