Forum: PC-Programmierung C: reference counting und constructoren/deconstructoren


von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe aus reinem Interesse ein par Funktionen geschrieben, mit denen:
 - Reference counting möglich wird
 - Das Abfragen der Grösse des reservierten Speicherbereichs anhand 
eines Pointers ermittelt werden kann
 - Zu einem struct einfach ein constructor und ein destructor definiert 
werden kann, welche automatich aufgerufen werden.

Getestet habe ich den code mit
1
gcc (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) 4.7.3

Im Anhang sind die oben beschriebenen Funktionen in der "references.c" 
und "references.h" und ein kleines beispiel (die restlichen Dateien)

Mich interessiert jetzt besonders, was an diesem Code noch verbessert 
werden kann.

Mit Freundlichen grüssen
Daniel Abrecht

von Vlad T. (vlad_tepesch)


Lesenswert?

imho ist C für sowas einfach nicht gemacht. Da fehlt die 
Operatorüberladung, ohne die der Code für den Betrachter nur noch sehr 
schwer parse-bar wird.
außerdem der automatische Destruktoraufruf beim Verlassen des Scopes.

Ein großes Manko an dem Code ist, dass es nicht unterbunden wird, den 
Pointer von Hand zu kopieren, oder zu setzten.

Dies könnte man erreichen, indem man eine Struktur für den Smartpointer 
erzeugt, die man nicht einfach mit pointer=NULL; beschreiben kann.

Nachteil ist, dass die Struktur dann einen void* haben muss.

Das könnte man durch Macros, die Templates emulieren, lösen.

Du definierst eine BasisPointerStruktur mit einem void* und die 
operationen, wie copy, alloc, dealloc und erzeugst mit MACROS speziell 
für einen Typ inline-Funktionen, die intern die Basisfunktionen 
aufrufen.

Aber all die Mühe lohnt sich nicht, weil die Hauptfehlerquelle, das 
vergessen der Pointerfreigabe ist.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.