Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
A kereten való allokáció onnan kapta a nevét, hogy a függvény meghívásakor beállítanak egy "veremkeretet". A veremkeret a memória olyan területe, amely ideiglenesen tárolja a függvény argumentumait, valamint a függvényhez helyileg definiált változókat. A keretváltozókat gyakran "automatikus" változóknak nevezik, mert a fordító automatikusan lefoglalja számukra a helyet.
A keretkiosztásoknak két fő jellemzője van. Először is, ha meghatároz egy helyi változót, elegendő hely van lefoglalva a veremkereten a teljes változó tárolásához, még akkor is, ha az egy nagy tömb vagy adatstruktúra. Másodszor, a keretváltozók automatikusan törlődnek, amikor kimennek a hatókörből:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Helyi függvényváltozók esetén ez a hatókör-áttűnés akkor fordul elő, amikor a függvény kilép, de a keretváltozó hatóköre kisebb lehet, mint egy függvény, ha beágyazott zárójeleket használ. A keretváltozók automatikus törlése nagyon fontos. Egyszerű primitív típusok (például intbájtok), tömbök vagy adatstruktúrák esetén az automatikus törlés egyszerűen visszanyeri a változó által használt memóriát. Mivel a változó kilépett a hatókörből, ezért nem érhető el. C++ objektumok esetén azonban az automatikus törlés folyamata egy kicsit bonyolultabb.
Ha egy objektum keretváltozóként van definiálva, a rendszer automatikusan meghívja annak konstruktorát a definíció ütközésekor. Amikor az objektum kiesik a hatókörből, a rendszer automatikusan meghívja annak destruktorát, mielőtt az objektum memóriáját visszanyeri. Ez az automatikus építés és megsemmisítés nagyon hasznos lehet, de figyelnie kell az automatikus hívásokra, főként a destruktorra.
Az objektumok kereten való kiosztásának fő előnye, hogy automatikusan törlődnek. Ha az objektumokat a kereten foglalja le, nem kell aggódnia az elfelejtett objektumok miatt, amelyek memóriavesztést okoznak. (A memóriaszivárgással kapcsolatos részletekért lásd az MFC memóriaszivárgásainak észleléséről szóló cikket.) A keretkiosztás hátránya, hogy a keretváltozók nem használhatók a hatókörükön kívül. A keretfoglalás és a halomfoglalás kiválasztásának másik tényezője, hogy nagy struktúrák és objektumok esetében gyakran jobb a halom használata a verem helyett tárolásra, mivel a verem memória gyakran korlátozott.