C: reference counting und constructoren/deconstructoren

OP #3729171
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
Angehängte Dateien:
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.