728x90
반응형
C++
에서 동적 배열 관리를 안전하게 하기 위해std::unique_ptr
를 사용하는 것은 매우 좋은 습관입니다.- 하지만
C++11
과C++14
에서는 배열에 대한 지원 방식에 차이가 있으므로 주의가 필요합니다. - 아래에서 두 표준의 차이점과 올바른 사용법을 비교해 보겠습니다.
C++11
에서는std::make_unique
템플릿이 배열 타입에 대해 제공되지 않습니다.- 따라서 배열을 스마트 포인터로 관리하려면 직접
new
연산자를 이용해unique_ptr
를 생성해야 합니다.
-
cpp
#include <memory> #include <iostream> class SpreadsheetCell { public: SpreadsheetCell() { std::cout << "생성됨" << std::endl; } ~SpreadsheetCell() { std::cout << "소멸됨" << std::endl; } }; int main() { { std::unique_ptr<SpreadsheetCell[]> smartCellp(new SpreadsheetCell[3]); // smartCellp를 통해 배열 사용 가능 } // 여기서 자동으로 delete[] 호출 return 0; }
C++14
부터는 배열을 위한std::make_unique
가 도입되어 배열도 더 안전하고 간결하게 생성할 수 있습니다.
-
cpp
#include <memory> #include <iostream> class SpreadsheetCell { public: SpreadsheetCell() { std::cout << "생성됨" << std::endl; } ~SpreadsheetCell() { std::cout << "소멸됨" << std::endl; } }; int main() { { auto smartCellp = std::make_unique<SpreadsheetCell[]>(3); // smartCellp를 통해 배열 사용 가능 } // 스코프 종료 시 자동으로 delete[] 호출 return 0; }
-
기능 C++11
C++14
배열 타입 make_unique 지원 지원되지 않음 지원됨 배열 unique_ptr 생성 방식 std::unique_ptr<T[]>(new T[size])
직접 호출 필요std::make_unique<T[]>(size)
사용 가능스코프 벗어나면 자동 삭제 자동 삭제됨 ( delete[]
호출)자동 삭제됨 ( delete[]
호출)
- C++11 에서는 배열 타입에
make_unique
를 사용할 수 없으므로unique_ptr<T[]>
를 직접 생성해야 합니다. - C++14 이상을 사용 중이라면
std::make_unique<T[]>(size)
를 활용해 더 안전하고 직관적으로 배열 스마트 포인터를 생성하세요.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
728x90
반응형
'C C++' 카테고리의 다른 글
C++ 표준에서 제거된 주요 항목 목록 (0) | 2025.03.21 |
---|---|
C++에서 구조체(struct)를 다양하게 선언하는 방법 (0) | 2025.03.21 |
std::unique_ptr 생성 방법과 예외 안전성 (0) | 2025.03.20 |
C++ 문자열(string)을 실수형 double로 변환하는 다양한 방법 (0) | 2025.03.20 |
C++ 컴파일러의 최대 잘라먹기(Maximal Munch) 원칙과 주의할 사례 (0) | 2025.03.20 |