Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

11

24.03.2015, 22:06

Wie funktionieren in D dann Doppelzeiger?
Zumindest offiziell ist es doch weitgehend eine GC basierte Sprache. Somit gibt es keine Smart Pointer.

Ich kenne das Refactoring Problem auch sehr gut. Allerdings denke ich in der Tat, dass es nicht anders zu lösen wäre.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

12

24.03.2015, 23:37

Ich verwende, wenn ich D benutze, soweit möglich keinen GC und habe meine eigenen Wrapper für Smart Pointer. Man kann auch ganz gut ohne GC auskommen. :)
Bezüglich Doppelpointer: In D wird nur die erste "Stufe" Dereferenziert. Also ein Beispiel (der Einfachheit halber mit GC):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
import std.stdio;

struct Foo {
    int n = 42;
}

void main() {
    Foo* ptr = new Foo();
    Foo** ptr2 = &ptr;
    
    writeln(ptr.n); // 42
    writeln(ptr2.n); // Error: no property 'n' for type 'Foo**'
}


Link: http://dpaste.dzfl.pl/97644a3bfc2e8
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -