C++스마트 포인터


통사론

  • std::shared_ptr<ClassType> variableName = std::make_shared<ClassType>(arg1, arg2, ...);
  • std::shared_ptr<ClassType> variableName (new ClassType(arg1, arg2, ...));
  • std::unique_ptr<ClassType> variableName = std::make_unique<ClassType>(arg1, arg2, ...); // C ++ 14
  • std::unique_ptr<ClassType> variableName (new ClassType(arg1, arg2, ...));

비고

C ++은 메모리 관리 언어가 아닙니다. 동적으로 (로 만든 즉, 객체 메모리를 할당 new 명시 적으로 (로 할당이 해제되지 않은 경우 "유출"됩니다) delete ). 동적으로 할당 된 메모리가 그 객체에 대한 마지막 포인터를 버리기 전에 해제되는 것을 보장하는 것은 프로그래머의 책임입니다.

스마트 포인터를 사용하여 동적으로 할당 된 메모리의 범위를 자동으로 관리 할 수 ​​있습니다 (예 : 마지막 포인터 참조가 범위를 벗어나 삭제 된 경우).

스마트 포인터는 대부분 "원시"포인터보다 선호됩니다. 동적으로 할당 된 메모리의 소유권 의미를 명시 적으로 나타내며, 객체가 공유되거나 고유하게 소유되도록 의도되었는지 여부를 그들의 이름으로 전달합니다.

스마트 포인터를 사용하려면 #include <memory> 를 사용하십시오.

스마트 포인터 관련 예