Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12
  1. #11
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,487
    Originariamente inviato da Whitecrowsrain
    non capisco perché si ottiene il riferimento all'oggetto e non il valore dell'oggetto, io non gli passo un puntatore, ma faccio una assegnazione.
    Non esiste un "valore dell'oggetto", a meno che non si tratti di un value type (ad esempio, interi, booleani, tipi enumerativi, oppure record).

    Quando si parla di oggetto, qualsiasi assegnazione tra variabili che hanno la sua classe come tipo è l'assegnazione di un riferimento all'oggetto.

    Originariamente inviato da Whitecrowsrain
    Di conseguenza mi aspettavo che a formato1 venisse copiato il valore dell'oggetto risultato della funzione e non che invece venisse assegnato il riferimento all'oggetto stesso.
    E' ovvio che in quest'ottica diventa superfluo creare gli oggetti formato1 e formato2..
    Ogni volta che chiami Create, crei un'istanza della classe, vale a dire un oggetto, e ne memorizzi tramite l'assegnazione un riferimento alla variabile che appartiene al tipo della classe.

    Ogni volta che assegni tale variabile a un array, lo passi a una lista, lo passi a un'altra variabile e così via, tu stai sempre e solo copiando un riferimento allo stesso oggetto.

    Non solo è superfluo creare l'instanza di TFormato come hai fatto, ma è anche sbagliato poiché causa un "memory leak": il riferimento all'oggetto che hai creato viene sostituito subito dopo con il riferimento al formato presente nella lista, pertanto il riferimento al primo oggetto viene perduto, rendendo impossibile accedervi nuovamente e, allo stesso modo, lasciandolo in memoria senza che venga distrutto.

    Se ipotizzi di avere un timer che esegue quell'evento ripetutamente, la memoria occupa dall'applicazione aumenterà progressivamente, senza possibilità di recuperarla (fino a quando l'applicazione non verrà chiusa, ovviamente).


    Per ottenere il risultato da me sperato dovevo fare una cosa del genere:
    [...]
    ed avrei raggiunto il risultato sperato, giusto?
    Sì. Non so bene perché ti serva creare oggetti in cui memorizzi dati che hai a tranquillamente a disposizione (invece di utilizzare direttamente tali oggetti, senza copiarne i valori), però quanto hai scritto rispecchia maggiormente le intenzioni di cui parlavi.

    Suggerisco un corso accelerato di programmazione a oggetti, perché ciò con cui ti stai scontrando può essere considerato l'ABC di questo paradigma e una formazione essenziale per poter utilizzare Delphi correttamente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  2. #12
    Originariamente inviato da alka
    Non esiste un "valore dell'oggetto", a meno che non si tratti di un value type (ad esempio, interi, booleani, tipi enumerativi, oppure record).

    Quando si parla di oggetto, qualsiasi assegnazione tra variabili che hanno la sua classe come tipo è l'assegnazione di un riferimento all'oggetto.

    Ogni volta che chiami Create, crei un'istanza della classe, vale a dire un oggetto, e ne memorizzi tramite l'assegnazione un riferimento alla variabile che appartiene al tipo della classe.
    Era proprio questo che mi sfuggiva!


    Originariamente inviato da alka
    Non solo è superfluo creare l'instanza di TFormato come hai fatto, ma è anche sbagliato poiché causa un "memory leak": il riferimento all'oggetto che hai creato viene sostituito subito dopo con il riferimento al formato presente nella lista, pertanto il riferimento al primo oggetto viene perduto, rendendo impossibile accedervi nuovamente e, allo stesso modo, lasciandolo in memoria senza che venga distrutto.
    Si questo lo immaginavo!

    Originariamente inviato da alka
    Sì. Non so bene perché ti serva creare oggetti in cui memorizzi dati che hai a tranquillamente a disposizione (invece di utilizzare direttamente tali oggetti, senza copiarne i valori), però quanto hai scritto rispecchia maggiormente le intenzioni di cui parlavi.
    in realtà non mi serve, era solo a scopo autodidattico!!

    Originariamente inviato da alka
    Suggerisco un corso accelerato di programmazione a oggetti, perché ciò con cui ti stai scontrando può essere considerato l'ABC di questo paradigma e una formazione essenziale per poter utilizzare Delphi correttamente.
    Ciao!
    Ti ringrazio per il suggerimento, anche se a dire il vero superai brillantemente l'esame al tempo dell'università e sono anni che lavoro per una software house programmando in Delphi e PHP.. Mi era proprio sfuggito questo piccolo ma basilare concetto e probabilmente mi riandrò a ripassare il mio vecchio libro di programmazione ad oggetti!!(magari avessi tempo per far qualche corso di approfondimento!)
    Di certo ne ho ancora tante di cose da imparare ed è per questo che mi piace confrontarmi con voi.. soprattutto con te Alka!
    Grazie ancora una volta!
    Alla prossima!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.