C ++ Bellek Yönetimi: yeni ve sil

Bu eğitimde, örnekler yardımıyla yeni ve silme işlemlerini kullanarak C ++ 'da belleği etkin bir şekilde yönetmeyi öğreneceğiz.

C ++, çalışma zamanında bir değişkenin veya bir dizinin belleğini ayırmamızı sağlar. Bu, dinamik bellek ayırma olarak bilinir.

Java ve Python gibi diğer programlama dillerinde, derleyici, değişkenlere ayrılan bellekleri otomatik olarak yönetir. Ancak C ++ 'da durum böyle değildir.

C ++ 'da, değişken için herhangi bir kullanımımız olmadığında, dinamik olarak ayrılmış belleği manuel olarak serbest bırakmamız gerekir.

Sırasıyla newve deleteişleçlerini kullanarak belleği dinamik olarak ayırabilir ve ardından ayırabiliriz .

C ++ yeni Operatör

newOperatör bir değişkene bellek ayırır. Örneğin,

 // declare an int pointer int* pointVar; // dynamically allocate memory // using the new keyword pointVar = new int; // assign value to allocated memory *pointVar = 45;

Burada, operatörü intkullanarak bir değişken için dinamik olarak bellek newayırdık.

Belleği dinamik olarak ayırmak için pointVar işaretçisini kullandığımıza dikkat edin. Bunun nedeni, newoperatörün bellek konumunun adresini döndürmesidir.

Bir dizi durumunda, newoperatör dizinin ilk elemanının adresini döndürür.

Yukarıdaki örnekten, newoperatörü kullanmak için sözdiziminin olduğunu görebiliriz

 pointerVariable = new dataType;

Operatörü sil

Dinamik olarak tanımladığımız bir değişkeni artık kullanmamız gerekmediğinde, değişken tarafından kullanılan belleği serbest bırakabiliriz.

Bunun için deleteoperatör kullanılır. Belleği işletim sistemine döndürür. Bu, bellek serbest bırakma olarak bilinir .

Bu operatör için sözdizimi

 delete pointerVariable;

Kodu düşünün:

 // declare an int pointer int* pointVar; // dynamically allocate memory // for an int variable pointVar = new int; // assign value to the variable memory *pointVar = 45; // print the value stored in memory cout << *pointVar; // Output: 45 // deallocate the memory delete pointVar;

Burada, intpointVar işaretçisini kullanarak bir değişken için dinamik olarak bellek ayırdık.

PointVar içeriğini yazdırdıktan sonra, kullanarak belleği serbest bıraktık delete.

Not : Program büyük miktarda istenmeyen bellek kullanırsa new, işletim sistemi için kullanılabilir bellek olmayacağından sistem çökebilir. Bu durumda deleteoperatör sistemin çökmesine yardımcı olabilir.

Örnek 1: C ++ Dinamik Bellek Tahsisi

 #include using namespace std; int main() ( // declare an int pointer int* pointInt; // declare a float pointer float* pointFloat; // dynamically allocate memory pointInt = new int; pointFloat = new float; // assigning value to the memory *pointInt = 45; *pointFloat = 45.45f; cout << *pointInt << endl; cout << *pointFloat << endl; // deallocate the memory delete pointInt, pointFloat; return 0; )

Çıktı

 45 45.45

Bu programda, hafızayı iki değişken intve floattipine dinamik olarak ayırdık . Onlara değerler atadıktan ve yazdırdıktan sonra, nihayet anıları kodu kullanarak ayırıyoruz.

 delete pointInt, pointFloat;

Not: Dinamik bellek ayırma, bellek yönetimini daha verimli hale getirebilir.

Özellikle dizilerin boyutunu çalışma zamanına kadar çoğu zaman bilmediğimiz diziler için.

Örnek 2: C ++ new ve delete Operator for Arrays

 // C++ Program to store GPA of n number of students and display it // where n is the number of students entered by the user #include #include using namespace std; int main() ( int num; cout <> num; float* ptr; // memory allocation of num number of floats ptr = new float(num); cout << "Enter GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 <> *(ptr + i); ) cout << "Displaying GPA of students." << endl; for (int i = 0; i < num; ++i) ( cout << "Student" << i + 1 << " :" << *(ptr + i) << endl; ) // ptr memory is released delete () ptr; return 0; )

Çıktı

Toplam öğrenci sayısını girin: 4 Öğrenci not ortalamasını girin. Öğrenci1: 3.6 Öğrenci2: 3.1 Öğrenci3: 3.9 Öğrenci4: 2.9 Öğrencilerin not ortalamasını görüntüleme. Öğrenci1: 3.6 Öğrenci2: 3.1 Öğrenci3: 3.9 Öğrenci4: 2.9

Bu programda, kullanıcıdan öğrenci sayısını girmesini ve num değişkenine kaydetmesini istedik.

Ardından, floatnew kullanarak diziye belleği dinamik olarak ayırdık .

Gösterge notasyonu kullanarak diziye veri giriyoruz (ve daha sonra yazdırıyoruz).

Artık diziye ihtiyacımız kalmadığında, kodu kullanarak dizi belleğini serbest bırakıyoruz delete () ptr;.

Kullanımına dikkat ()sonra delete. ()Hafızanın serbest bırakılmasının bir dizi olduğunu belirtmek için köşeli parantezleri kullanırız .

Örnek 3: C ++ new ve delete Operator for Objects

 #include using namespace std; class Student ( int age; public: // constructor initializes age to 12 Student() : age(12) () void getAge() ( cout << "Age = " << age 

Output

 Age = 12

In this program, we have created a Student class that has a private variable age.

We have initialized age to 12 in the default constructor Student() and print its value with the function getAge().

In main(), we have created a Student object using the new operator and use the pointer ptr to point to its address.

The moment the object is created, the Student() constructor initializes age to 12.

We then call the getAge() function using the code:

 ptr->getAge();

Notice the arrow operator ->. This operator is used to access class members using pointers.

Ilginç makaleler...