반응형

출처 : https://velog.io/@kimku1018/C-programming-1-vf5osk9i

C++에서 `new` 표현식은 동적으로 메모리를 할당하여 객체 또는 배열을 생성하는 데 사용됩니다. `new`를 통해 할당된 메모리는 수동으로 해제되어야 합니다(`delete` 키워드를 사용하여).

기본적인 형태는 다음과 같습니다:

포인터_타입* 변수_이름 = new 생성자;


여기서:

- `포인터_타입`은 동적으로 할당된 메모리를 가리키기 위한 포인터의 타입입니다.
- `변수_이름`은 할당된 메모리를 가리키는 포인터 변수의 이름입니다.
- `생성자`는 동적으로 생성될 객체나 배열을 초기화하는 데 사용되는 생성자입니다.

아래는 몇 가지 예시입니다:

1. 객체 생성:

   int* intValue = new int; // int 타입의 객체 동적 생성
   double* doubleValue = new double(3.14); // double 타입의 객체를 초기값과 함께 동적 생성



2. 배열 생성:

   int* intArray = new int[5]; // int 배열 동적 생성 (크기 5)



3. 사용자 정의 타입 객체 생성:

   class MyClass {
       // 클래스 멤버 정의
   };

   MyClass* myObj = new MyClass; // 사용자 정의 타입 객체 동적 생성



`new`로 할당된 메모리는 `delete`를 사용하여 수동으로 해제해주어야 합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다.

delete intValue; // 객체 동적 할당 메모리 해제
delete[] intArray; // 배열 동적 할당 메모리 해제
delete myObj; // 사용자 정의 타입 객체 동적 할당 메모리 해제



C++11부터는 스마트 포인터(`std::shared_ptr`, `std::unique_ptr` 등)를 사용하여 메모리 관리를 자동화하는 것이 권장됩니다. 이는 메모리 누수의 가능성을 줄이고 코드의 안정성을 향상시킬 수 있습니다.

 

스마트 포인터

스마트 포인터(Smart Pointer)는 C++에서 메모리 관리를 자동화하기 위한 객체입니다. 스마트 포인터는 동적으로 할당된 메모리를 관리하고, 해당 메모리의 소유권을 추적하여 자동으로 메모리를 해제합니다. 이를 통해 메모리 누수를 방지하고, 코드의 안전성을 향상시킬 수 있습니다.

C++에서 가장 일반적으로 사용되는 스마트 포인터에는 다음과 같은 종류가 있습니다:

1. std::unique_ptr:
   - `std::unique_ptr`은 단일 소유권을 가지는 스마트 포인터입니다. 특정 객체 또는 배열에 대해 단일 소유권을 가질 수 있습니다.
   - 소유권은 해당 `std::unique_ptr`가 가리키는 객체 또는 배열에 대한 유일한 소유자를 의미하며, 다른 `std::unique_ptr`나 포인터에 소유권을 이전할 수 있습니다.
   - 사용 예시:

     std::unique_ptr<int> uniquePtr = std::make_unique<int>(42);



2. std::shared_ptr:
   - `std::shared_ptr`은 여러 스마트 포인터 간에 소유권을 공유할 수 있는 스마트 포인터입니다. 동적으로 할당된 메모리에 대한 공유 소유권을 가집니다.
   - 객체를 여러 `std::shared_ptr`가 공유하고 있을 때, 해당 객체는 모든 `std::shared_ptr`가 소멸될 때까지 유지됩니다.
   - 사용 예시:

     std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);



3. std::weak_ptr:
   - `std::weak_ptr`은 `std::shared_ptr`와 함께 사용되며, 서로 간에 순환 참조를 방지하는 데 사용됩니다.
   - `std::weak_ptr`는 `std::shared_ptr`의 소유권을 가지지 않고, `std::shared_ptr`로부터 만들어집니다.
   - 사용 예시:

     std::weak_ptr<int> weakPtr = sharedPtr;



스마트 포인터를 사용하면 명시적으로 `delete`를 호출하지 않아도 되며, 자동으로 메모리 관리가 이루어집니다. 또한, 스마트 포인터를 사용하면 소유자의 수명이 끝날 때 자동으로 메모리가 해제되므로 메모리 누수의 위험이 크게 감소합니다.

반응형

+ Recent posts