본문 바로가기
Software/C++

[C++ 기초] 12. new 연산자와 delete 연산자

by 리미와감자 2023. 3. 20.

new 연산자

정의

데이터형의 크기를 확인하여 메모리 공간을 할당하는 연산자(동적메모리 할당)

 

절차

1. 어떤 데이터형과 크기를 원하는지 new 연산자에게 알려준다.
2. new 연산자는 그 데이터형과 크기에 맞는 메모리 블록을 만든다.
3. 메모리 블록의 주소를 리턴한다.

 

 

메모리 접근 방법 차이

 

1. 포인터 변수 초기화(정적메모리 할당)

int a;
int* b = &a;
// 메모리 접근 방법(c style) : 1. b    2. a의 주소

 

2. new 연산자(동적메모리 할당)

int* pointer = new int; // 4byte 메모리 블록 생성
// 메모리 접근 방법 : 포인터 변수인 pointer

 

c++에서는 new 연산자를 사용하지만, c에서는 malloc()이라는 함수를 사용하여 동적메모리 할당을 진행한다.

 

 

 

 

 

 

delete 연산자

정의

사용한 메모리를 다시 메모리 풀로 반환하는 연산자

delete pointer; // 반드시 반환해야한다.

 

규칙

1. new로 대입하지 않은 메모리는 delete로 해제할 수 없다.
2. 같은 메모리 블록을 연달아 두 번 연속 delete로 해제할 수 없다.
3. new[]로 메모리를 대입할 경우 delete[]로 해제한다.
4. new[]를 사용하지 않으면 delete[]를 사용할 수 없다.

 

 

 

Code

#include <iostream>

using namespace std;

int main() {

    double* p3 = new double[3]; // double형 데이터 3개를 저장할 메모리 공간 대입
    p3[0] = 0.2;
    p3[1] = 0.5;
    p3[2] = 0.8;

    cout << "p3[1] is " << p3[1] << ".\n";

    p3 = p3 + 1; // 포인터를 증가시킨다. p3의 시작 주소가 증가하게 된다.

    cout << "Now p3[0] is " << p3[0] << " and "; // 0.2가 아닌 0.5
    cout << "p3[1] is " << p3[1] << "\n."; // 0.5가 아닌 0.8
    
    p3 = p3 - 1; // 다시 시작 주소 원상복귀
    delete[] p3; // 메모리 해제


    return 0;
}

 

결과

더보기

p3[1] is 0.5.
Now p3[0] is 0.5 and p3[1] is 0.8

'Software > C++' 카테고리의 다른 글

[C++ 기초] 14. 반복문  (0) 2023.03.23
[C++ 기초] 13. 포인터 심화  (1) 2023.03.22
[C++ 기초] 11. 포인터 기초  (0) 2023.03.20
[C++ 기초] 10. 공용체(Union)와 열거체(Enum)  (1) 2023.03.12
[C++ 기초] 9. 구조체(Struct)  (0) 2023.03.12

댓글