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

  1. new()연산자를 사용하여 C++에서 동적으로 배열 할당
  2. std::unique_ptr 메서드를 사용하여 C++에서 동적으로 배열 할당
  3. std::make_unique()메서드를 사용하여 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;

관련 문장 - C++ Array

  • C++의 함수에서 배열을 반환하는 방법