Suggerimenti sulla proprietà del puntatore

2

In alcune librerie che ho visto, viene posta molta enfasi sul cambiamento di proprietà dei puntatori, come ad esempio un metodo di classe che alloca e restituisce un puntatore a un oggetto mentre cede la proprietà al chiamante.

La mia domanda è: come progetteresti se dovessi codificare qualcosa con il vincolo che nessuna proprietà del puntatore viene trasferita, mai?

    
posta Stefano Borini 12.01.2011 - 16:58
fonte

5 risposte

3

Se vuoi essere sicuro che la proprietà del puntatore non venga mai trasferita, devi assicurarti che ogni oggetto abbia un proprietario dalla tua libreria. Questo può essere fatto in due modi.

  1. Quando crei i tuoi oggetti, il costruttore dovrebbe fare riferimento a un altro oggetto che ne sarà il proprietario e quindi aggiungersi alla "lista dei bambini" del proprietario.
  2. Non crei tu stesso gli oggetti; invece chiedi al proprietario di creare un nuovo figlio, che aggiunge al suo elenco.

In ogni caso, ciò può limitare la possibilità di eliminare oggetti quando non sono più necessari ma il loro oggetto principale è. Per aggirare questo, metti una linea nel distruttore che rimuove l'oggetto che viene distrutto dalla lista dei suoi genitori.

    
risposta data 12.01.2011 - 18:11
fonte
1

Ciò che chiedi è esattamente ciò che fa JAVA o .NET, che è l'utilizzo della memoria di tracciamento. Viene eseguito in modo tale che il chiamante di una funzione di libreria non assume esplicitamente la proprietà del puntatore.

    
risposta data 12.01.2011 - 17:16
fonte
1

Sono un programmatore Delphi e penso che possiamo risolvere molto con l'uso di BPL, ma non l'abbiamo mai esplorato, dal momento che è più semplice scrivere una funzione libera qualsiasi che integrare un altro modo di fare le cose.

Detto questo, a seconda del modo in cui le cose sono possedute o create nella tua lingua, potrebbe essere più facile fare una sorta di messaggistica tra DLL con stringhe di ascii (cioè XML / JSON) o dati binari (serializza i tuoi oggetti in qualche modo ) e ricrearli dall'altra parte.

    
risposta data 12.01.2011 - 17:52
fonte
1

Non lo farei. Quella restrizione precluderebbe quasi ogni ragione utile per avere dei puntatori! Le funzioni di fabbrica, ad esempio, sarebbero fuori. Ogni volta che hai visto un diamante nero dall'altra parte di un'astrazione ... saresti fregato.

    
risposta data 13.01.2011 - 09:27
fonte
0

Chiunque assegna qualcosa è (o dovrebbe essere) responsabile di distruggerlo quando obsoleto, se stiamo parlando di puntatori a oggetti allocati dinamicamente.

    
risposta data 12.01.2011 - 18:14
fonte

Leggi altre domande sui tag