C++에서 배열을 동적으로 할당하는 방법

Jinku Hu 2023년10월12일
  1. new()연산자를 사용하여 C++에서 동적으로 배열 할당
  2. std::unique_ptr 메서드를 사용하여 C++에서 동적으로 배열 할당
  3. std::make_unique()메서드를 사용하여 C++에서 동적으로 배열 할당
C++에서 배열을 동적으로 할당하는 방법

이 문서에서는 C++에서 배열을 동적으로 할당하는 방법에 대한 여러 방법을 보여줍니다.

new()연산자를 사용하여 C++에서 동적으로 배열 할당

new 연산자는메모리에 객체를 동적으로 할당하고 위치에 대한 포인터를 반환합니다. 이 예제 프로그램에서는 상수 문자 배열과 크기를int 변수로 선언합니다. 그런 다음char 배열을 동적으로 할당하고 해당 값을for 루프 본문의 요소에 할당합니다.

arr 포인터와 관련된 메모리가 더 이상 필요하지 않으면delete 연산자를 명시 적으로 호출해야합니다. delete 연산자 뒤에 지정된 대괄호는 포인터가 배열의 첫 번째 요소를 참조한다는 것을 컴파일러에 알려줍니다. 배열에 대한 포인터를 삭제할 때 대괄호를 생략하면 동작이 정의되지 않습니다.

#include <iostream>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};

int main() {
  char *arr = new char[SIZE];

  for (int i = 0; i < SIZE; ++i) {
    arr[i] = chars[i];
    cout << arr[i] << "; ";
  }
  cout << endl;

  delete[] arr;
  return EXIT_SUCCESS;
}

출력:

B; a; d; C; T; L; A; R; e; I;

std::unique_ptr 메서드를 사용하여 C++에서 동적으로 배열 할당

동적 배열을 할당하는 또 다른 방법은 더 안전한 메모리 관리 인터페이스를 제공하는std::unique_ptr 스마트 포인터를 사용하는 것입니다. unique_ptr 함수는 자신이 가리키는 객체를 소유한다고합니다. 그 대가로 포인터가 범위를 벗어나면 객체가 파괴됩니다. 일반 포인터와는 달리 스마트 포인터는 프로그래머가 호출 할delete 연산자를 필요로하지 않습니다. 대신 객체가 소멸 될 때 암시 적으로 호출됩니다.

#include <iostream>
#include <memory>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};

int main() {
  std::unique_ptr<char[]> arr(new char[SIZE]);

  for (int i = 0; i < SIZE; ++i) {
    arr[i] = chars[i];
    cout << arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

B; a; d; C; T; L; A; R; e; I;

std::make_unique()메서드를 사용하여 C++에서 동적으로 배열 할당

make_unique 함수는 동적 메모리 관리를 처리하는보다 현대적인 대안입니다. 이 메소드는 주어진 유형의 객체를 동적으로 할당하고std::unique_ptr 스마트 포인터를 반환합니다. 개체의 유형은 템플릿 매개 변수처럼 지정됩니다. 반면에 고정 된 크기의char 배열은 다음 예제에서auto 유형 변수에 할당되고 할당됩니다.

#include <iostream>
#include <memory>

using std::cout;
using std::endl;

constexpr int SIZE = 10;
static const char chars[] = {'B', 'a', 'd', 'C', 'T', 'L', 'A', 'R', 'e', 'I'};

int main() {
  auto arr = std::make_unique<char[]>(SIZE);

  for (int i = 0; i < SIZE; ++i) {
    arr[i] = chars[i];
    cout << arr[i] << "; ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

출력:

B; a; d; C; T; L; A; R; e; I;
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Array