Frage

Derzeit meine Objective C-Klassen verwenden C ++ Objekte durch eine new tun, wenn der Eigentümer erstellt wird, und ruft delete, wenn es zerstört wird. Aber gibt es einen anderen Weg? Ich möchte in der Lage sein, sagt sie zu erklären, ein auto_ptr dessen Umfang dauert die Dauer der Objective-C-Klasse Lebensdauer.

War es hilfreich?

Lösung

Ok, lassen Sie mich annehmen, dass Sie C ++ verwenden und Objective-C auf einem Mac, wenn ich richtig sind Sie wahrscheinlich X-Code verwenden. Also, wenn Sie auf die Eigenschaften (info) Ihr Projekt gehen. Sie können die Kompilierungsoptionen (GCC) überprüfen. Dort gibt es eine Option, C ++ Konstruktoren / Destruktoren zu ermöglichen (die standardmäßig in Cocoa Projekten ausgeschaltet ist).

Dann erhalten Sie default-wie C ++ Scoping, aber ich habe es nicht viel gebraucht und ich habe Probleme mit stark Template-Code (Boost) hat.

Auch ich denke nicht, dass jemand offiziell dieses außer ein paar gute Seelen unterstützt auf GCC arbeiten. Also würde ich empfehlen, dass Sie Unit-Test etwas Derartiges, und merkt, dass etwas schief gehen könnte.

Dennoch C in der Lage zu verwenden ++ in Objective-C, für mich als C ++ Person, ist eine Erleichterung und die Risiken sind die Vorteile wert:)

Andere Tipps

Wenn Sie auch nur die geringste Hoffnung zu behalten, was wenig Vernunft, die wir als Entwickler verlassen haben, werden Sie das nicht tun. Am besten ist es Ihre C ++ Objekte delete. Im Allgemeinen, während es sicher ist, Objective-C und C ++ auf einer Zeile-für-Zeile-Basis zu mischen, nicht erwarten, die Laufzeit etwas zu tun Phantasie wie Misch Leben zu unterstützen. In der Regel können Sie sicher Ihre Objekte, wenn die obj-c Klasse dealloc genannt wird aber anders als das zerstören, nicht erwarten, Klassenbereich und nicht weinen zu mischen.

In Xcode Ich lese "The Objective-C Programming Language", der Abschnitt mit dem Titel "C ++ mit Objective-C". Ich habe es nicht ausprobiert, aber es sagt, Sie können Verwendung C ++ Klassen als Instanzvariablen. Es verwendet das Null-Argument Konstruktor keine Instanzvariablen zu initialisieren, die Klassen C ++ sind. In dealloc werden die Destruktoren in umgekehrter Instanz Variablendeklaration Reihenfolge aufgerufen.

Ich kam gerade über boost :: shared_ptr mit Cocoa . Beide verwenden eine intelligente Referenzzählung Zeiger (eine, die alle die Referenzzählung für die Zuordnung etc Betreiber für Sie verwaltet).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top