Im Allgemeinen für C # und speziell für Unity würde ich davon abraten ... aber wenn Sie wirklich wollten oder guten Grund hatten, könnten Sie.
In C # müssten Sie sich mit dem so genannten unsicheren Code vertraut machen . Noch Angst?
In Unity müssten Sie den unsicheren Kompilierungsmodus aktivieren, damit Sie den Web-Player nicht verwenden können, wenn Sie dies geplant haben. Sie können hier oder hier mehr lesen .
Also im Grunde C # wurde mit einem entworfen Garbage Collector so viele Skriptsprachen sind. Die allgemeine Idee besteht darin, den Begriff der Speicherverwaltung zu abstrahieren, um die Entwicklung zu vereinfachen. Es kann immer noch zu Ressourcenlecks kommen, wenn Sie Ihre Objekte nicht aufheben. Ich bin ehrlich gesagt kein großer Befürworter von GCs und würde stattdessen RAII- Methoden bevorzugen , aber dies ist die Welt, in der wir leben.
Die meisten C ++ - Entwickler würden jedoch auch zustimmen, dass Sie Zeiger sowieso nicht direkt verwenden sollten und es vorziehen sollten, einen von RAII entworfenen Typ, auch bekannt als intelligente Zeiger, zu verwenden . Wenn Sie sich in C-Land befinden, sind Zeiger für Sie wahrscheinlich eine Selbstverständlichkeit, aber selbst dann hilft es, sie bis zu einem gewissen Grad zu abstrahieren.
Wenn Sie sie in C # verwenden, beachten Sie nur, dass es ein sehr reales Potenzial gibt, dass Sie Sicherheitslücken hinzufügen oder wirklich böse und schwer zu lokalisierende Fehler finden können. Sie müssen auch berücksichtigen, dass Sie darauf achten müssen, keine Objekte zu referenzieren, die vom GC verschoben werden können. Beachten Sie die Verwendung der festen Aussage hier .
Sie können Zeiger auch in Unity verwenden, indem Sie ein natives Plugin schreiben . Dies schließt Webplayer-Builds erneut aus, aber die neue HTML5-Funktion basiert auf emscripten. Wenn Sie dies verwenden möchten , können Sie dies wahrscheinlich tun , wenn Sie vorsichtig sind. Mit nativen Plugins können Sie Unity plattformübergreifend erweitern. Ich habe ein natives Plugin geschrieben, um beispielsweise über eine serielle Verbindung mit einigen Mikrocontrollern zu kommunizieren.
Zusammenfassend sollten Sie sich also auf jeden Fall fragen, warum ich in Unity Zeiger in C # verwenden möchte. Wenn du es nur zum Spaß machen willst ... Knock dich aus.
Edit:
Es tut mir leid, wenn ich jemanden beleidigt habe, da ich weiß, dass meine Gedanken zu GC momentan nicht der populären Meinung sind.
Wenn Sie meine Antwort wirklich lesen, werden Sie feststellen, dass ich C # nicht als Skriptsprache bezeichne. Ich vergleiche es mit "vielen Skriptsprachen", aber im Kontext von Unity wird es sehr häufig als Skriptsprache verwendet. Es ist eine Art DSL für Unity, wenn Sie so wollen. Oft wird es in diesem Zusammenhang sogar als Unity-Skript bezeichnet (dies bezieht sich hauptsächlich auf die Javascript-Alternative von Unity zu C #). Wenn Sie LLVM in Ihre Pipeline aufnehmen, können Sie es einfach direkt in nativen Code für die Plattform kompilieren ... wie würden Sie es dann nennen? Also wollte ich hier wirklich keine Haare spalten.
Viele großartige Referenzen zum Software-Engineering sind mit Meinungen gefüllt:
Effektives C ++ ,
effektiveres C ++ , häufig gestellte
Fragen zu C ++ ,
effektives C # ,
modernes C ++ - Design ,
Designmuster
... und unzählige andere. Ich glaube nicht, dass dies die Argumente weniger glaubwürdig macht, wenn ihnen eine nachdenkliche Erklärung folgt.
Ich habe nicht wirklich alles gesagt "Benutze niemals Zeiger !!" . Tatsächlich benutze ich sie gelegentlich immer noch nackt. Ich sagte "im Allgemeinen" wie in "Verwenden Sie lieber sicheren Code als unsicheren Code in C #". Es gibt Situationen, in denen dies von Vorteil sein kann, und dies ist eine der wirklich leistungsstarken Funktionen von C #, um Ihre Werkzeuge auszuwählen. Mit C # können Sie sogar bis zu einem gewissen Grad Transparenz im GC-Prozess haben, Sprachen wie Dart nicht und dies kann sehr leicht zu Ressourcenlecks führen. Sicher, wenn Sie der einzige Entwickler eines kleinen Projekts sind, ist dies wahrscheinlich kein Problem. Wenn Sie in einem Team von beispielsweise 10+ mit Hunderttausenden von Codezeilen arbeiten, kann dies schwierig werden.
Ich wollte einfach, dass der Leser Vorsicht walten lässt, wenn er nackte Zeiger verwendet. Es ist fast so, als würde man sehr vorsichtig sein, wenn man mit Netzstrom arbeitet. Ich sage nicht, dass Sie kein Elektriker sind, nur dass Sie tot sind, wenn Sie den falschen Schritt machen und ihn nicht mit Respekt behandeln.
Ich mag das Beispiel von Lasse, in dem die Leistung die Notwendigkeit diktiert haben könnte.