Programming/JAVA, C++, Go, Rust
make_shared, make_unique의 장점
Roiei
2022. 4. 16. 14:45
반응형
장점
- 코드 중복 제거
- std::shared_ptr<MyType> aobj(new MyType); 와 같이 MyType을 2회 지정하는 것을 1회로 줄일 수 있음
- 이 2회 지정의 실수를 예방할 수 있음
- std::shared_ptr<MyType> aobj(new MyType); 와 같이 MyType을 2회 지정하는 것을 1회로 줄일 수 있음
- 예외 안정성
- func(std::shared_ptr<MyType>(new MyType), someFunc());
- new MyType이후 someFunc가 실행되어 (compiler에 의해) 여기서 exception 발생 시,
- MyType에 대한 메모리 누수 발생
- func(std::shared_ptr<MyType>(new MyType), someFunc());
- make_shared를 통해 생성해야 CBLK가 객체와 한 덩어리로 할당됨
단점
- custom deleter를 지정할 수 없음
- 지정하려면, make_shared를 사용하면 안 됨
- std::shared_ptr<MyType> aobj(new MyType, customDeleter);
- 초기화 리스트 미지원
- {5, 10}의 두 값이 들어가게 하고 싶어 다음과 같이 코딩하면,
- std::make_shared<std::vector<int>>(5, 10);
- 여기서 5와 10은 벡터의 초기화 값이 아닌 make_shared의 초기화 값이며,
- make_shared는 이를 5개의 10의 값들로 해석해서 동작
- 즉, 5가 10개 생성됨
반응형