ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² динамичСской памяти

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’Π°ΠΊ ΠΊΠ°ΠΊ послС выдСлСния памяти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚, для удобства ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ new со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ — конструктором ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… классов Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ. Для выдСлСния памяти ΠΏΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈ Ρ„ункция new. НапримСр, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² динамичСской памяти (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π±ΠΎΠ»Π΅Π΅ эффСктивно. Благодаря Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ совмСстимости Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ссылку Π½Π° Π»ΡŽΠ±ΠΎΠΉ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ, Ρ‡Ρ‚ΠΎ Π² ΡΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠΈ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ позволяСт Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ классами ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ. Из ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π½ΠΈΡ… ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ динамичСскиС структуры.

Для выдСлСния памяти ΠΏΠΎΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈ Ρ„ункция new. НапримСр, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ:

type.

pmonster = ''-monster; pdaemon = ''daemon;

var pm: pmonster; pd: pdaemon;

ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²:

new (pm); {ΠΈΠ»ΠΈ pm:= new (pmonster);} new (pd); {ΠΈΠ»ΠΈ pd:= new (pdaemon);}.

Π’Π°ΠΊ ΠΊΠ°ΠΊ послС выдСлСния памяти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚, для удобства ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ new со Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ — конструктором ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

new (pm, init (1, 1, 1, 1);

{ΠΈΠ»ΠΈ pm := new (pmonster, init (1, 1, 1, 1));} new (pd, init (1, 1, 1, 1, 1);

{ΠΈΠ»ΠΈ pd := new (pdaemon, init (1, 1, 1, 1, 1));}.

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ динамичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выполняСтся ΠΏΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

pm^.draw; pm^.attack;

Π‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ памяти часто Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, Ρ‚. Π΅. ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ, создав ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса:

pm: = new (pdaemon, init (1, 1, 1, 1, 1));

Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… классов Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ.

ДСструкторы

Для освобоТдСния памяти, занятой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, примСняСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°.

Dispose:

Dispose (pm);

Она освобоТдаСт количСство Π±Π°ΠΉΡ‚ΠΎΠ², Ρ€Π°Π²Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΡƒ указатСля. Если Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ хранится ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Π±ΡƒΠ΄Π΅Ρ‚ освобоТдСно Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ΠΎΠ². Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ освобоТдСния памяти ΠΈΠ·-ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Dispose ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ — дСструктор. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Borland Pascal Π΅ΠΌΡƒ рСкомСндуСтся Π΄Π°Π²Π°Ρ‚ΡŒ имя done:

destructor monster. done;

begin.

end;

Dispose (pm, done);

Π’ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ дСйствия, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ². ДСструктор ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. Для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², содСрТащих динамичСскиС поля, Π² Π½Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ освобоТдСния памяти для этих ΠΏΠΎΠ»Π΅ΠΉ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎ ΡΠ»ΡƒΠΆΠ΅Π±Π½ΠΎΠΌΡƒ слову destructor вставляСт Π² ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ получСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· VMT. ДСструктор ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Dispose, ΠΈ ΠΎΠ½Π° освобоТдаСт количСство памяти, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ фактичСскому Ρ‚ΠΈΠΏΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ДСструкторы ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для динамичСских ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько дСструкторов (Π² ΡΡ‚ΠΎΠΌ случаС ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°).

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ