Управљање меморијом Ц ++: ново и брисање

У овом упутству научићемо ефикасно управљање меморијом у Ц ++-у помоћу нових и брисања операција уз помоћ примера.

Ц ++ нам омогућава да доделимо меморију променљиве или низа у времену извођења. Ово је познато као динамичка алокација меморије.

У другим програмским језицима као што су Јава и Питхон, компајлер аутоматски управља меморијама додељеним променљивим. Али то није случај у Ц ++-у.

У Ц ++-у морамо ручно ослободити динамички додељену меморију након што не користимо променљиву.

Можемо издвојити и онда деаллоцате меморија динамички користећи newи deleteоператора респективно.

Ц ++ нови оператер

newОператор додељује меморију променљивој. На пример,

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

Овде смо динамички доделили меморију за intпроменљиву помоћу newоператора.

Приметите да смо користили показивач поинтВар за динамичку алокацију меморије. То је зато што newоператор враћа адресу меморијске локације.

У случају низа, newоператер враћа адресу првог елемента низа.

Из горњег примера видимо да је синтакса за употребу newоператора

 pointerVariable = new dataType;

избриши Оператор

Једном када више не морамо користити променљиву коју смо динамички декларисали, можемо ослободити меморију коју заузима променљива.

За ово deleteсе користи оператор. Враћа меморију у оперативни систем. Ово је познато као ослобађање меморије .

Синтакса овог оператора је

 delete pointerVariable;

Размотрите код:

 // 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;

Овде смо динамички доделили меморију за intпроменљиву помоћу показивача поинтВар.

Након штампања садржаја поинтВар-а, ослободили смо меморију помоћу delete.

Напомена : Ако програм користи велику количину нежељене меморије new, систем се може срушити јер за оперативни систем неће бити доступне меморије. У овом случају, deleteоператер може помоћи систему да падне.

Пример 1: Динамичко додељивање меморије Ц ++

 #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; )

Оутпут

 45 45.45

У овом програму динамички смо алоцирали меморију на две променљиве типа intи float. Након што смо им доделили вредности и одштампали их, коначно ослобађамо меморије помоћу кода

 delete pointInt, pointFloat;

Напомена: Динамичко додељивање меморије може управљање меморијом учинити ефикаснијим.

Нарочито за низове, где често не знамо величину низа до времена извођења.

Пример 2: Ц ++ нови и брисање оператора за низове

 // 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; )

Оутпут

Унесите укупан број ученика: 4 Унесите просечни успех ученика. Студент1: 3.6 Студент2: 3.1 Студент3: 3.9 Студент4: 2.9 Приказивање просечног успеха ученика. Студент 1: 3,6 Студент 2: 3,1 Студент 3: 3,9 Студент 4: 2,9

У овом програму тражили смо од корисника да унесе број ученика и ускладишти га у променљиву нум.

Затим смо динамички доделили меморију за floatниз користећи нев.

Уносимо податке у низ (и касније их исписујемо) помоћу ознаке показивача.

Након што нам низ више није потребан, ослобађамо меморију низа помоћу кода delete () ptr;.

Обратите пажњу на употребу ()афтер delete. Углатим заградама користимо ()да означимо да је ослобађање меморије низа.

Пример 3: Ц ++ нови и брисање оператора за објекте

 #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.

Занимљиви Чланци...