make_shared, make_unique의 장점

2022. 4. 16. 14:45Programming/JAVA, C++, Go, Rust

    목차
반응형

장점

  • 코드 중복 제거
    • std::shared_ptr<MyType> aobj(new MyType); 와 같이 MyType을 2회 지정하는 것을 1회로 줄일 수 있음
      • 이 2회 지정의 실수를 예방할 수 있음
  • 예외 안정성
    • func(std::shared_ptr<MyType>(new MyType), someFunc());
      • new MyType이후 someFunc가 실행되어 (compiler에 의해) 여기서 exception 발생 시, 
      • MyType에 대한 메모리 누수 발생
  • 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개 생성됨

 

 

반응형

'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글

Effective Modern C++  (0) 2022.04.21
Universal reference  (0) 2022.04.16
Go 언어 변수 선언  (0) 2022.01.09
Flutter vs. React Native  (0) 2021.12.30
go 언어로 web server 만들기 1 (고 언어 웹 서버)  (0) 2021.12.30