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