C ++ nowy operator

C ++ nowy operator
Omówimy, jak skutecznie zarządzać alokacją w C ++, wykorzystując funkcję „nową” za pomocą praktycznych przykładów.

W C ++ termin „wdrażanie pamięci dynamicznej” odnosi się do ręcznego przydziału pamięci przez programistę. Sterta jest miejscem, w którym wdrażana jest rozproszona pamięć współdzielona, ​​a stos jest w miejscu, w którym zmienne nietatyczne i lokalne nabywają zasoby pamięci.

Aplikacje

  • Przydzielanie przechowywania wielkości dynamicznej, która nie jest możliwa do osiągnięcia w przypadku przechowywania kompilatora oprócz różnych tablic, to jedno użycie dynamicznej alokacji pamięci.
  • Główną korzyścią jest wszechstronność, jaką daje programistom. Mamy absolutną autonomię do alokacji i uwalniania pamięci w razie potrzeby i jak już nie jest wymagane. Ta wszechstronność jest przydatna w wielu sytuacjach.

W jaki sposób C ++ przydziela pamięć?

Metody Malloc () i Calloc () w C ++ są używane do dynamicznej zmiany pamięci podczas wykonania. Podczas gdy metoda Free () służy do uwolnienia pamięci, która została przydzielona. Metody te są dostarczane przez C ++ wraz z dwoma operatorami „nowymi” i „usuwaniem”, które sprawiają, że alokacja pamięci i uwalnianie jest łatwiejsza i bardziej wydajna.

Korelacja między „nowym” słowem kluczowym a nowym „nowym” operatorem

Te dwie rzeczy różnią się od siebie.

Odbywają się dwa zdarzenia: rozkład pamięci i tworzenie obiektów. Oba są obsługiwane przez „nowe” słowo kluczowe. Dzwonienie do operatora i samodzielne wywołanie konstruktora to procedury przydzielania pamięci. Operator „nowy” nie ponosi żadnej odpowiedzialności za wywołanie konstruktora, ale pozwala dostosować strategię alokacji przechowywania. Nowe słowo kluczowe ma tę odpowiedzialność. Wywołanie konstruktora bez używania operatora nowe jest wykonalne.

Nowy operator

Zapotrzebowanie na alokacja pamięci w otwartym pamięci jest wskazywana przez nowy operator. Jeśli dostępna jest wystarczająca pamięć, nowy operator przetwarza dane. Następnie inicjuje go i podaj obiektu wskaźnika adresu niedawno przydzielonej i skonfigurowanej pamięci.

Przykład 1

Wykonujemy ten kod, aby pokazać, w jaki sposób można wykorzystać nowych i usuwania operatorów; Pamięć zostanie dynamicznie przydzielona i zwolniona.

#włączać
za pomocą przestrzeni nazw Std;
int main ()

int* a = null;
a = nowy (nothrow) int;
Jeśli (!A)
Cout << "Memory is not allocated\n";
w przeciwnym razie

*a = 45;
Cout << "Value of a: " << *a << endl;

float *c = nowy float (67.84);
Cout << "Value of c: " << *c << endl;
int x = 6;
int *b = new (nothrow) int [x];
Jeśli (!B)
Cout << "Memory is not allocated\n";
w przeciwnym razie

for (int j = 0; j < x; j++)
B [j] = j+1;
Cout << "A chunk of memory containing values: ";
for (int j = 0; j < x; j++)
Cout << b[j] << " ";

Usuń a;
usuń c;
usunąć [] b;
powrót 0;

Wymagane biblioteki zostałyby zintegrowane. Następnie standardowy przestrzeń nazw zostanie dodana jako „std”. Tutaj wywołana zostanie funkcja main (). Zainicjujemy wskaźnik i ustawym ten wskaźnik na „null”. Poprośmy o przechowywanie zmiennych wykorzystywanych dla „nowego” operatora. Typ danych „A” będzie „liczbą całkowitą”. Obowiązuje się warunek „IF-Else”. Jeśli określony warunek jest spełniony, instrukcja „Cout” wyświetli tekst „pamięć nie jest przydzielona”. W przeciwnym razie przechowowalibyśmy wartość wskaźnika.

Następnie polecenie „Cout” pokazuje wartość wskaźnika. Teraz poprosilibyśmy o blok pamięci, wykorzystując „nowy” operator. Określamy wartość zmiennej zmiennej „C” za pomocą operatora „nowego”. Teraz „cout” wydrukuje wartość zmiennej „C”. Tutaj określamy rozmiar bloku pamięci. Zadeklarujemy zmienną „x” i ustawiamy jej typ danych jako „liczbę całkowitą”. Konstruujemy nowy wskaźnik o nazwie „B” i podajemy mu wartość za pomocą operatora „nowego”.

Jeszcze raz zostanie wykorzystany warunek „IF-Else”. W oświadczeniu „else” użyliśmy instrukcji „for”. Początkowo zmienna pętli „J” zostanie zadeklarowana i definiujemy stan. Następnie zwiększamy wartość zmiennej pętli o 1. Komenda „cout” byłaby używana do wydrukowania wiersza „Chunk pamięci zawierającej wartości”. Po raz kolejny zastosujemy pętlę „for”.

Teraz uwolnimy przydzieloną pamięć przez wykorzystanie operatora „Usuń”. Przed dodaniem polecenia „Return 0” uwolniamy blok przydzielonej pamięci za pomocą tablicy.

Zdobywamy tego rodzaju wynik po wykonaniu wyżej wymieniony program.

Przykład 2

W tym przypadku wykorzystamy operator „nowego” dla różnych obiektów.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

int *l = null;
l = new int ();
int *v = new int (23);
Jeśli(!L)

Cout<<"bad memory allocation"<
w przeciwnym razie

Cout<<"memory allocated successfully"<*l = 20;
Cout<<"*l = "<<*l<Cout<<"*v = "<<*v<
Double *arr = null;
Arr = nowy podwójny [20];
Jeśli(!ARR)
cout<<"memory not allocated"<w przeciwnym razie

dla (int k = 0; k<20;k++)
arr [k] = k+1;
Cout<<"arr values : ";
dla (int k = 0; k<20;k++)
Cout<< arr[k]<<"\t";

Usuń L;
Usuń v;
Usuń [] arr;
powrót 0;

Na ilustracji jest integracja niezbędnych bibliotek . Następnie zostanie dodany przestrzeń nazw zwana „STD”. Metoda główna () byłaby wywoływana. Aby zainicjować wskaźnik, ustawilibyśmy go na „Null.„Wartość zmiennej„ I ”, która jest używana dla„ nowego ”operatora, byłaby tutaj przechowywana. Typ danych tej zmiennej to „Liczba całkowita.„Zostanie zastosowany warunek„ IF-Else ”. Jeśli określony warunek zostanie spełniony, tekst „zła pamięć” zostanie wyświetlony przez instrukcję „Cout”. Jeśli nie, zachowalibyśmy wartość wskaźnika.

Następnie tekst „pamięć przydzielona pomyślnie” jest wyświetlany za pomocą polecenia „Cout”. Wartość wskaźnika zostałaby ustawiona. Wartość wskaźnika byłaby wyświetlana przez polecenie „Cout”. Zainicjowaliśmy tablicę z typem danych „podwójnie” i daliśmy jej wartość „null.„Korzystając z„ nowego ”operatora, definiujemy wartość tej tablicy. Używa instrukcji „IF-Else”. Po spełnieniu warunku polecenie „Cout” drukuje „Nie przydzielono pamięci.”; W przeciwnym razie użyliśmy zagnieżdżonych „do” stwierdzeń.

Przed zdefiniowaniem warunku zmienna pętli „J” zostanie najpierw określona. Następnie dodajemy 1 do wartości „j”. Wartości tablicy zostałyby wydrukowane za pomocą polecenia „Cout”. Ponownie użylibyśmy pętli „for”. Teraz będziemy korzystać z operatora usuwania. Zwolnimy pamięć, która została przydzielona. Zwolniamy blok przydzielonej pamięci, wykorzystując tablicę przed dodaniem instrukcji „Return 0”.

Po wdrożeniu wyżej wspomnianego kodu otrzymujemy pożądany wynik.

Wniosek

Wykorzystanie „nowego” operatora jest przedmiotem tego artykułu. W przypadku typów danych zdefiniowanych przez użytkownika w klasach i innych typach danych wykorzystamy operator „nowego”. Wykonaliśmy dwa przykłady związane z tym tematem. Pierwszy przykład pokazuje, jak używać C ++ „Nowy” operator. Ostatnia ilustracja pokazuje, jak zastosować „nowy” operator do obiektów.