Главная Новости Галерея Вопросы Библиотека Контакты

make_shared 예제

std::make_shared 참조 카운트 구조에 대 한 메모리와 개체 자체에 대 한 메모리를 한 블록에 할당 합니다. 그런 다음 인수를 생성자로 완벽하게 전달하여 개체를 생성합니다. 다른 장단점이 문제가 되지 않는 경우 make_shared를 기본값으로 사용해야 하는 한 가지 이유가 있습니다. 언제나 처럼, 아무것도 무료로 온다. make_shared를 사용하면 우리가 알아야 할 몇 가지 장단점이 수반됩니다. 2단계가 throw되면 3 단계에 도달하지 않고 스마트 포인터가 A 포인터의 소유권을 차지하지 않으며 메모리 누수가 있습니다. make_shared는 해당 문제를 처리합니다. 이 함수는 일반적으로 새 호출에 의해 반환 된 원시 포인터에서 공유 포인터의 구성 std::shared_ptr(새 T(args…))를 대체하는 데 사용됩니다. 이 식과 달리 std::make_shared 일반적으로 T 개체및 std::shared_ptr의 컨트롤 블록에 대해 단일 메모리 할당(표준에서 바인딩되지 않는 요구 사항)에 대한 메모리를 할당합니다 args…)) 두 개 이상의 메모리 할당을 수행합니다. 다음 예제에서는 shared_ptr 인스턴스가 소유한 메모리에 대한 포인터 비교를 사용하도록 다양한 비교 연산자의 오버로드 방법을 보여 주며, 이를 보여 주시면 됩니다. 또 다른 문제는 개체 자체가 아닌 개체 저장소의 수명일 수 있습니다. 마지막 shared_ptr이 소유권을 해제할 때 점점 오브젝트가 소멸되지만 마지막 weak_ptr이 사라질 때까지 ref 개수 구조는 계속 되어야 합니다.

make_shared를 사용하면 포인티 오브젝트에 대한 저장소가 포함됩니다. 큰 개체와 수명이 긴 weak_ptrs를 다룰 때 상당한 양의 빈 메모리가 불필요하게 잠겨 있음을 의미할 수 있습니다. 문제는 모든 경고가 비활성화된 STL 내부에서 축소가 발생한다는 것입니다. 이는 보안에 중요한 코드에 문제가 될 수 있으며 make_shared와 그 형제가 금지되어야 한다고 주장할 수 있습니다. 다음 예제에서는 다른 shared_ptr에서 이미 할당된 개체의 공유 소유권을 사용하는 shared_ptr 인스턴스를 선언하고 초기화하는 방법을 보여 주며, 이 예제에서는 shared_ptr 인스턴스를 선언하고 초기화하는 방법을 보여 주며, 이 인스턴스는 다른 shared_ptr에서 이미 할당된 개체의 공유 소유권을 가지고 있습니다. sp2가 초기화 된 shared_ptr이라고 가정합니다. shared_ptr은 요소를 복사하는 알고리즘을 사용할 때 C++ 표준 라이브러리 컨테이너에서도 유용합니다. shared_ptr에서 요소를 래핑한 다음 기본 메모리가 필요한 만큼 유효하고 더 이상 유효하지 않다는 것을 이해하여 다른 컨테이너에 복사할 수 있습니다.

다음 예제에서는 벡터의 shared_ptr 인스턴스에서 replace_copy_if 알고리즘을 사용하는 방법을 보여 주며 있습니다. dynamic_pointer_cast, static_pointer_cast 및 const_pointer_cast를 사용하여 shared_ptr을 캐스팅할 수 있습니다. 이러한 함수는 dynamic_cast, static_cast 및 const_cast 연산자와 유사합니다. 다음 예제에서는 기본 클래스의 shared_ptr 벡터에서 각 요소의 파생 된 형식을 테스트 한 다음 요소를 복사 하 고 그들에 대 한 정보를 표시 하는 방법을 보여 주었습니다. 자동 제로1 = std:make_shared (256); std:shared_ptr zero2{new uint8_t{256}}; make_shared에는 약간 알려진 문제가 있습니다: 경고를 억제합니다.