Új hozzászólás Aktív témák

  • MageRG

    addikt

    Tisztelt Hölgyek és Urak!
    class Base
    {
    /* ..., nincs virtual destructor */
    };

    class Derived: public Base
    {
    /* ... */
    };

    int main()
    {
    Base *basePtr = new Derived();
    delete basePtr; /* (1) memory leak, de miért? */

    void *ptr = (void*) new Derived(); /* tudom, borzalom */
    delete ptr; /* (2) itt mi történik? */
    return 0;
    }
    Szóval a fenti agymenés lenne a kérdés:
    (1)-nél gondolom azt hiszi a fordító, hogy ez egy Base objektum, ezért a származtatott osztály részeit már nem szabadítja fel.
    Ez mindig így van? Van olyan fordító, ami "tudja", hogy az adott pointer ténylegesen mekkora területre mutat?
    (2)-nél mi történik? Ha jól értem itt már semmilyen takarítás nincs (egy destruktor sem hívódik meg).
    Elnézést ha kicsit csekély értelmű kérdés...

Új hozzászólás Aktív témák