Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Esatto.

    Tra parentesi, guardando l'implementazione effettiva vedo che in realtà non viene memorizzato un puntatore al subobject base, quanto il normale puntatore alla vtable, in cui è memorizzato (oltre all'indirizzo degli eventuali metodi virtuali e al type info) l'offset del subobject base rispetto al "this". Questo è più efficiente, dato che non c'è bisogno di aggiustare il puntatore al momento della copia, e evita di tenere puntatori separati per vtable e subobject base. Il concetto di base comunque resta simile.

    Per ulteriori informazioni sulla questione, qui c'è tutto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #2
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Esatto.

    Tra parentesi, guardando l'implementazione effettiva vedo che in realtà non viene memorizzato un puntatore al subobject base, quanto il normale puntatore alla vtable, in cui è memorizzato (oltre all'indirizzo degli eventuali metodi virtuali e al type info) l'offset del subobject base rispetto al "this". Questo è più efficiente, dato che non c'è bisogno di aggiustare il puntatore al momento della copia, e evita di tenere puntatori separati per vtable e subobject base. Il concetto di base comunque resta simile.

    Per ulteriori informazioni sulla questione, qui c'è tutto.
    Ho letto la pagina che mi hai consigliato e vorrei chiederti alcune cose.
    Consideriamo questa situazione(sempre in riferimento alla struttura gerarchica di cui stiamo parlando):

    int main()
    {
    persona *q;
    studente *s;
    lavoratore *l;
    studente_lavoratore SL;

    s=&SL;
    s->p=10;

    l=&SL;
    l->p=100;

    q=&SL;
    q->p=1000;

    return 0;

    }

    Con queste linee di codice: s=&SL e s->p=10, l'accesso alla varibile "p" sarebbe di questo tipo:
    s->puntatore_alla_vtable->offset e poi attraverso l'offset che ricavo dalla vtable, so dove saltare per accedere alla varibile "p". Giusto?

    Stesso discorso per le linee di codice: l=&SL e l->p=100. Giusto?

    Invece, cosa accade con queste linee di codice: q=&SL e q->p=1000? Come avviene l'accesso alla variabile p? Semplicemente così:"q->p" senza passare per nessuna vtable?

    Grazie.

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.