'delete' ile Belleği Serbest Bırakma
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 7 / 56.
new kullanarak dinamik olarak bellek ayırdığınızda, işiniz bittiğinde bu bellek otomatik olarak kaybolmaz. Otomatik olarak temizlenen normal değişkenlerin aksine, dinamik olarak ayrılmış bellek, siz onu açıkça serbest bırakana kadar kullanımda kalır. İşte bu noktada delete anahtar kelimesi temel bir gereklilik haline gelir.
delete anahtar kelimesi, daha önce new ile ayrılmış olan belleği serbest bırakır. delete kullandığınızda, sisteme o bellekle işinizin bittiğini ve belleğin başka amaçlar için yeniden kullanılabileceğini söylemiş olursunuz:
int* ptr = new int(42); // Bellek ayır
// Belleği kullan...
delete ptr; // Belleği serbest bırakDinamik bellek yönetiminin temel kuralı basittir: her new için karşılık gelen bir delete olmalıdır. Dinamik olarak ayrılmış belleği silmeyi unutursanız, bir bellek sızıntısı oluşturursunuz - programınız artık kullanmadığı belleği tutmaya devam eder, bu da sonunda sisteminizin kullanılabilir belleğinin tükenmesine neden olabilir.
Bir işaretçi üzerinde delete çağrısı yaptıktan sonra, o işaretçi geçersiz hale gelir ve tekrar kullanılmamalıdır. Yanlışlıkla kullanılmasını önlemek için silme işleminden sonra işaretçiyi nullptr olarak ayarlamak iyi bir uygulamadır.
Görev
Kolaynew ile bellek ayırarak, bu belleği kullanarak ve ardından delete ile uygun şekilde serbest bırakarak tam dinamik bellek yaşam döngüsünü gösteren bir program oluşturun.
Aşağıdaki girdiler sağlanacaktır:
- Dinamik olarak ayrılmış bellekte saklanacak bir tam sayı değeri
- Saklanan değeri güncellemek için ikinci bir tam sayı değeri
Programınız şunları yapmalıdır:
- Bir tam sayı için dinamik olarak bellek ayırmak üzere
newkullanın ve işaretçiyidynamicPtradlı bir değişkende saklayın - Dereference (içerik) operatörünü kullanarak ilk girdi değerini dinamik olarak ayrılmış belleğe atayın
- Dinamik olarak ayrılmış bellekte saklanan ilk değeri yazdırın
- Dinamik olarak ayrılmış bellekteki değeri ikinci girdi değeriyle güncelleyin
- Güncellenmiş değeri yazdırın
- Dinamik olarak ayrılmış belleği serbest bırakmak için
deletekullanın - Silme işleminden sonra işaretçiyi
nullptrolarak ayarlayın - Belleğin serbest bırakıldığına dair bir onay mesajı yazdırın
Aşağıdaki tam çıktı formatını kullanın:
Initial value: [first value]
Updated value: [second value]
Memory freed successfullyKopya kağıdı
delete anahtar kelimesi, daha önce new ile ayrılmış olan belleği serbest bırakır:
int* ptr = new int(42); // Bellek ayır
// Belleği kullan...
delete ptr; // Belleği serbest bırakBellek sızıntılarını önlemek için, her new için karşılık gelen bir delete olmalıdır.
delete işlemini çağırdıktan sonra, yanlışlıkla geçersiz bellek kullanmaktan kaçınmak için işaretçiyi nullptr olarak ayarlayın:
delete ptr;
ptr = nullptr;Kendin dene
#include <iostream>
using namespace std;
int main() {
// Giriş değerlerini oku
int firstValue, secondValue;
cin >> firstValue;
cin >> secondValue;
// YAPILACAK: Kodunuzu aşağıya yazın
// 1. new kullanarak bellek ayırın ve dynamicPtr içinde saklayın
// 2. Ayrılan belleğe firstValue değerini atayın
// 3. Başlangıç değerini yazdırın
// 4. secondValue ile güncelleyin
// 5. Güncellenmiş değeri yazdırın
// 6. Belleği silin ve işaretçiyi nullptr olarak ayarlayın
// 7. Onay mesajını yazdırın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme