NOTA: sono interessato soprattutto a C#, Java e C++, ma poiché questa è la domanda più accademica che qualsiasi lingua possa fare.E 'possibile ad esempio distruggere/cancellare sé stessi?
So che questo problema è risolvibile dall'esterno, utilizzando metodi appropriati di determinate lingue (chiamando free
, Dispose
o rimuovendo tutti i riferimenti all'istanza).
La mia idea è di creare un'istanza e, nel costruttore, avviare il timer privato. Alla fine del timer chiamerà un metodo di istanza e distruggerà la variabile.
Penso che in C# dovrebbe essere possibile chiamare Dispose
su sé, quando è implementato lo IDisposable
, ma ciò non distruggerebbe l'instace.
In C++ potrei chiamare lo destructor
, ma questo porterebbe alla perdita di memoria, in più è davvero una cattiva pratica.
In Java non ho idea, assegnando a this
non è possibile in quanto è il campo final
.
Quindi c'è un modo, ad esempio, per distruggere se stessi?
in C# penso sia sufficiente per indirizzare l'istanza su null –
Normalmente il GC in .NET svolge un ottimo lavoro da solo. A meno che non crei la tua perdita di memoria _own_ mantenendo un oggetto attorno staticamente (o in altro modo), allora dovrebbe essere rimosso alla fine. Plausibilmente, è possibile utilizzare un metodo factory che non restituisca un riferimento diretto all'oggetto, ma un riferimento debole. Probabilmente ancora non aiuta molto; puoi ancora recuperare un riferimento forte tramite il riferimento debole. Forse la domanda migliore è: che problema stai cercando di risolvere? –
Dipende da cosa intendi per "destroy/delete" in Java. Puoi chiamare qualsiasi metodo su "questo" - che è equivalente ad es. chiamando Dispose() su un oggetto in C#. Se vuoi dire che vuoi che l'oggetto sia spazzato via, devi solo cancellare tutti i riferimenti ad esso e aspettare che il garbage collector lo liberi. –