Buon pomeriggio, per favore spiegate quanto segue:
class Cbase
{
public:
virtual ~Cbase(){};
int k;
};
class Cchild:public Cbase
{
public:
~Cchild(){};
double *p;
int f;
};
Ho due classi, credo che l'istanza di generazione successiva (base - bambino - bambino2 - ...), prenda sempre più spazio in memoria. All'operatore New, diciamo esattamente quanta memoria allocare, passando la classe in parametri. Ma nell'operatore di cancellazione, non diciamo esattamente quanta memoria allocare. Procedendo da questo ragionamento, non è del tutto chiaro cosa succederà nella prossima situazione:
Voglio dire che abbiamo dichiarato *pClass come puntatore a Cbase (una classe piccola rispetto a Cchild), ma in realtà punta a Cchild. Da qui la domanda: come si comporteràdelete()? Libererà un numero di byte pari alla dimensione di Cbase (quindi la memoria sarà intasata), o la cancellazione avverrà correttamente?
P.S: bene, un'altra domanda sull'argomento: c'è qualche etichetta nell'area di memoria allocata (nuova), con cui possiamo capire la dimensione di quest'area (qualcosa come char memorizzato con null-terminator alla fine)? O in altre parole, un pezzo di codice che non sa nulla delle dimensioni delle classi che ho dichiarato può liberare correttamente la memoria?
La domanda è: come si comporteràdelete()? Libererà un numero di byte pari alla dimensione di Cbase (quindi la memoria sarà intasata), o la cancellazione avverrà correttamente?
Naturalmente, libererà la memoria correttamente.
P.S: bene, un'altra domanda sull'argomento: c'è qualche etichetta nell'area di memoria allocata (nuova), con cui possiamo capire la dimensione di quest'area (qualcosa come char memorizzati con terminatore zero alla fine)? O in altre parole, un frammento di codice che non sa nulla delle dimensioni delle classi che ho dichiarato può liberare correttamente la memoria?
Naturalmente si cancellerà correttamente. potete distribuire i brickpoint sui distruttori
Questo è più o meno il punto di partenza di questa domanda. L'ho fatto più o meno come descritto (il distruttore non era virtuale), e i distruttori sotto la classe del puntatore non sono stati chiamati.
Penso che sizeof funzioni a tempo di compilazione, ma sto parlando di liberare la memoria da un altro processo per esempio. Se questo è possibile, allora penso che la funzione di cancellazione sia comprensibile.
La questione non è nemmeno più su ciò che abbiamo impostato nelle funzioni di classe tramite new, ma sui dati di classe dei suoi membri "nativi". Dopo tutto, non sono nemmeno spazi vuoti.
Compito... Si prega di allegare un modulo di segnalazione (non ne ho uno). Diamo un'occhiata.
Ancora più strano. Non capisco l'effetto.
effetto solo durante l'inizializzazione, nel tester tutto è normale
Ok, non ne ho bisogno, non ne ho davvero bisogno.
L'indicatore Zigzag legge valori che non esistono più (dovevano esserci prima del ridisegno). Si può evitare questo?
Se i valori sono nel buffer, perché non sta disegnando di nuovo...
Buon pomeriggio, per favore spiegate quanto segue:
Ho due classi, credo che l'istanza di generazione successiva (base - bambino - bambino2 - ...), prenda sempre più spazio in memoria. All'operatore New, diciamo esattamente quanta memoria allocare, passando la classe in parametri. Ma nell'operatore di cancellazione, non diciamo esattamente quanta memoria allocare. Procedendo da questo ragionamento, non è del tutto chiaro cosa succederà nella prossima situazione:
Voglio dire che abbiamo dichiarato *pClass come puntatore a Cbase (una classe piccola rispetto a Cchild), ma in realtà punta a Cchild. Da qui la domanda: come si comporteràdelete()? Libererà un numero di byte pari alla dimensione di Cbase (quindi la memoria sarà intasata), o la cancellazione avverrà correttamente?
P.S: bene, un'altra domanda sull'argomento: c'è qualche etichetta nell'area di memoria allocata (nuova), con cui possiamo capire la dimensione di quest'area (qualcosa come char memorizzato con null-terminator alla fine)? O in altre parole, un pezzo di codice che non sa nulla delle dimensioni delle classi che ho dichiarato può liberare correttamente la memoria?
220Volt:
La domanda è: come si comporteràdelete()? Libererà un numero di byte pari alla dimensione di Cbase (quindi la memoria sarà intasata), o la cancellazione avverrà correttamente?
Naturalmente, libererà la memoria correttamente.
P.S: bene, un'altra domanda sull'argomento: c'è qualche etichetta nell'area di memoria allocata (nuova), con cui possiamo capire la dimensione di quest'area (qualcosa come char memorizzati con terminatore zero alla fine)? O in altre parole, un frammento di codice che non sa nulla delle dimensioni delle classi che ho dichiarato può liberare correttamente la memoria?
Naturalmente si cancellerà correttamente. potete distribuire i brickpoint sui distruttori
dimensione di ?