Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Geheugenbeheer:nieuw en verwijderen

C++ Geheugenbeheer:nieuw en verwijderen

In deze zelfstudie leren we geheugen effectief te beheren in C++ met behulp van nieuwe en verwijderbewerkingen met behulp van voorbeelden.

C++ stelt ons in staat om het geheugen van een variabele of een array in runtime toe te wijzen. Dit staat bekend als dynamische geheugentoewijzing.

In andere programmeertalen, zoals Java en Python, beheert de compiler automatisch de geheugens die aan variabelen zijn toegewezen. Maar dit is niet het geval in C++.

In C++ moeten we de toewijzing van het dynamisch toegewezen geheugen handmatig ongedaan maken nadat we de variabele niet meer hebben gebruikt.

We kunnen geheugen dynamisch toewijzen en vervolgens ongedaan maken met behulp van de new en delete respectievelijk operators.


C++ nieuwe operator

De new operator wijst geheugen toe aan een variabele. Bijvoorbeeld,

// declare an int pointer
int* pointVar;

// dynamically allocate memory
// using the new keyword 
pointVar = new int;

// assign value to allocated memory
*pointVar = 45;

Hier hebben we dynamisch geheugen toegewezen voor een int variabele met behulp van de new telefoniste.

Merk op dat we de aanwijzer pointVar . hebben gebruikt om het geheugen dynamisch toe te wijzen. Dit komt omdat de new operator retourneert het adres van de geheugenlocatie.

In het geval van een array, de new operator retourneert het adres van het eerste element van de array.

Uit het bovenstaande voorbeeld kunnen we zien dat de syntaxis voor het gebruik van de new operator is

pointerVariable = new dataType;

operator verwijderen

Zodra we een variabele die we dynamisch hebben gedeclareerd niet langer nodig hebben, kunnen we de toewijzing van het geheugen dat door de variabele wordt ingenomen, ongedaan maken.

Hiervoor is de delete operator wordt gebruikt. Het geeft het geheugen terug aan het besturingssysteem. Dit staat bekend als memory deallocation .

De syntaxis voor deze operator is

delete pointerVariable;

Overweeg de code:

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

Hier hebben we dynamisch geheugen toegewezen voor een int variabele met de aanwijzer pointVar .

Na het afdrukken van de inhoud van pointVar , hebben we de toewijzing van het geheugen ongedaan gemaakt met behulp van delete .

Opmerking :Als het programma een grote hoeveelheid ongewenst geheugen gebruikt met new , kan het systeem crashen omdat er geen geheugen beschikbaar is voor het besturingssysteem. In dit geval is de delete operator kan het systeem helpen bij een crash.


Voorbeeld 1:C++ dynamische geheugentoewijzing

#include <iostream>
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;
    delete pointFloat;

    return 0;
}

Uitvoer

45
45.45

In dit programma hebben we dynamisch geheugen toegewezen aan twee variabelen van int en float soorten. Nadat we er waarden aan hebben toegewezen en ze hebben afgedrukt, maken we de toewijzing van de geheugens definitief ongedaan met behulp van de code

delete pointInt;
delete pointFloat;

Opmerking: Dynamische geheugentoewijzing kan geheugenbeheer efficiënter maken.

Vooral voor arrays, waarbij we de grootte van de array vaak pas tijdens de runtime weten.


Voorbeeld 2:C++ nieuwe en delete-operator voor 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 <iostream>
using namespace std;

int main() {
    int num;
    cout << "Enter total number of students: ";
    cin >> 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 << ": ";
        cin >> *(ptr + i);
    }

    cout << "\nDisplaying 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;
}

Uitvoer

Enter total number of students: 4
Enter GPA of students.
Student1: 3.6
Student2: 3.1
Student3: 3.9
Student4: 2.9

Displaying GPA of students.
Student1 :3.6
Student2 :3.1
Student3 :3.9
Student4 :2.9

In dit programma hebben we de gebruiker gevraagd om het aantal studenten in te voeren en op te slaan in het num variabel.

Vervolgens hebben we het geheugen dynamisch toegewezen voor de float array met new .

We voeren gegevens in de array in (en drukken ze later af) met behulp van aanwijzernotatie.

Nadat we de array niet langer nodig hebben, maken we de toewijzing van het arraygeheugen ongedaan met de code delete[] ptr; .

Let op het gebruik van [] na delete . We gebruiken de vierkante haken [] om aan te geven dat de geheugendeallocatie die van een array is.


Voorbeeld 3:C++ nieuwe en delete-operator voor objecten

#include <iostream>
using namespace std;

class Student {
    int age;

   public:

    // constructor initializes age to 12
    Student() : age(12) {}

    void getAge() {
        cout << "Age = " << age << endl;
    }
};

int main() {

    // dynamically declare Student object
    Student* ptr = new Student();

    // call getAge() function
    ptr->getAge();

    // ptr memory is released
    delete ptr;

    return 0;
}

Uitvoer

Age = 12

In dit programma hebben we een Student . gemaakt klasse met een privévariabele leeftijd .

We hebben age geïnitialiseerd tot 12 in de standaardconstructor Student() en druk de waarde af met de functie getAge() .

In main() , we hebben een Student . aangemaakt object met de new operator en gebruik de aanwijzer ptr om naar zijn adres te wijzen.

Op het moment dat het object wordt gemaakt, wordt de Student() constructor initialiseert leeftijd tot 12 .

We noemen dan de getAge() functie met de code:

ptr->getAge();

Let op de pijloperator -> . Deze operator wordt gebruikt om toegang te krijgen tot klasleden met behulp van aanwijzers.


C Taal

  1. termen en concepten voor digitaal geheugen
  2. C++ variabelen, literalen en constanten
  3. C++ klassen en objecten
  4. C++ Openbare, beschermde en privé-erfenis
  5. C++ vriend Functie en vriend Klassen
  6. Python-directory en bestandsbeheer
  7. Structuren en klassen in C++
  8. NIEUWE RASPBERRY PI 3 MODEL B + FUNCTIES EN AANKOOP
  9. GE Digital lanceert nieuwe software voor vermogensbeheer
  10. Nieuwe robots:voordelig en topklasse
  11. C - Geheugenbeheer