산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 메모리 관리:신규 및 삭제

C++ 메모리 관리:신규 및 삭제

이 자습서에서는 예제를 통해 새 작업과 삭제 작업을 사용하여 C++에서 메모리를 효과적으로 관리하는 방법을 배웁니다.

C++를 사용하면 런타임에 변수 또는 배열의 메모리를 할당할 수 있습니다. 이것을 동적 메모리 할당이라고 합니다.

Java 및 Python과 같은 다른 프로그래밍 언어에서 컴파일러는 변수에 할당된 메모리를 자동으로 관리합니다. 하지만 C++에서는 그렇지 않습니다.

C++에서는 변수를 사용하지 않으면 동적으로 할당된 메모리를 수동으로 할당 해제해야 합니다.

new을 사용하여 동적으로 메모리를 할당하고 할당을 해제할 수 있습니다. 및 delete 각각 연산자.

<시간>

C++ 새 연산자

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를 사용하는 변수 연산자.

포인터 pointVar를 사용했음을 주목하십시오. 메모리를 동적으로 할당합니다. 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에 대해 동적으로 메모리를 할당했습니다. 포인터를 사용하는 변수 pointVar .

pointVar의 내용을 출력한 후 , delete을 사용하여 메모리 할당을 해제했습니다. .

참고 :프로그램이 new를 사용하여 원치 않는 메모리를 많이 사용하는 경우 , 운영 체제에 사용할 수 있는 메모리가 없기 때문에 시스템이 충돌할 수 있습니다. 이 경우 delete 운영자가 시스템 충돌을 도울 수 있습니다.

<시간>

예제 1:C++ 동적 메모리 할당

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

출력

45
45.45

이 프로그램에서는 int의 두 변수에 메모리를 동적으로 할당했습니다. 및 float 유형. 값을 할당하고 인쇄한 후 코드를 사용하여 마지막으로 메모리 할당을 해제합니다.

delete pointInt;
delete pointFloat;

참고: 동적 메모리 할당은 메모리 관리를 보다 효율적으로 만들 수 있습니다.

특히 배열의 경우 런타임까지 배열의 크기를 모르는 경우가 많습니다.

<시간>

예제 2:배열을 위한 C++ new 및 delete 연산자

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

출력

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

이 프로그램에서는 사용자에게 학생 수를 입력하고 num에 저장하도록 요청했습니다. 변수.

그런 다음 float에 대해 동적으로 메모리를 할당했습니다. new를 사용하는 배열 .

포인터 표기법을 사용하여 배열에 데이터를 입력하고 나중에 인쇄합니다.

더 이상 배열이 필요하지 않으면 delete[] ptr; 코드를 사용하여 배열 메모리를 할당 해제합니다. .

[] 사용에 주의하세요. delete 이후 . 대괄호 []를 사용합니다. 메모리 할당 해제가 배열의 할당 해제임을 나타내기 위해.

<시간>

예제 3:C++ 객체에 대한 신규 및 삭제 연산자

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

출력

Age = 12

이 프로그램에서는 Student을 만들었습니다. 개인 변수 age가 있는 클래스 .

age를 초기화했습니다. 12로 기본 생성자 Student()에서 getAge() 함수로 값을 출력합니다. .

main()에서 , Student을(를) 만들었습니다. new을 사용하는 개체 연산자를 사용하고 ptr 포인터를 사용합니다. 주소를 가리킵니다.

객체가 생성되는 순간 Student() 생성자는 age를 초기화합니다. 12로 .

그런 다음 getAge() 코드를 사용하는 기능:

ptr->getAge();

화살표 연산자 ->에 주목하세요. . 이 연산자는 포인터를 사용하여 클래스 멤버에 액세스하는 데 사용됩니다.


C 언어

  1. 디지털 메모리 용어 및 개념
  2. C++ 변수, 리터럴 및 상수
  3. C++ 클래스 및 개체
  4. C++ 공개, 보호 및 비공개 상속
  5. C++ friend 함수 및 friend 클래스
  6. Python 디렉토리 및 파일 관리
  7. C++의 구조 및 클래스
  8. 새로운 RASPBERRY PI 3 모델 B + 기능 및 구매
  9. GE Digital, 새로운 자산 관리 소프트웨어 출시
  10. 새로운 로봇:경제적이고 최첨단