std::shared_ptr
이 질문은 std::shared_ptr
<code class="cpp">#include <memory> #include <iostream> #include <vector> int main() { std::cout << "At begin of main.\ncreating std::vector<std::shared_ptr<void>>" << std::endl; std::vector<std::shared_ptr<void>> v; { std::cout << "Creating test" << std::endl; v.push_back(std::shared_ptr<test>(new test())); std::cout << "Leaving scope" << std::endl; } std::cout << "Leaving main" << std::endl; return 0; }</code>
코드는 다음과 같은 결과를 보여줍니다.
At begin of main. creating std::vector<std::shared_ptr<void>> Creating test Test created Leaving scope Leaving main Test destroyed
유형 삭제 이해
이 동작의 핵심은 std::shared_ptr이 수행하는 유형 삭제에 있습니다. 새 인스턴스를 초기화할 때 std::shared_ptr은 내부 삭제 기능을 저장합니다. 이 함수는 기본적으로 shared_ptr이 삭제될 때 삭제 연산자를 호출합니다. 이 메커니즘은 shared_ptr의 유형에 관계없이 가리키는 개체의 소멸자가 적절한 시간에 호출되도록 보장합니다.
캐스팅 결과
std 캐스팅 ::shared_ptr
표준 준수 및 향후 영향
이 기술의 보장된 동작과 관련하여 다음이 중요합니다. std::shared_ptr의 내부 구현은 컴파일러와 플랫폼에 따라 다를 수 있습니다. 유형 삭제는 shared_ptrs의 기본 측면이었지만 구현에 대한 향후 변경 사항은 잠재적으로 설명된 기능에 영향을 미칠 수 있습니다.
따라서 이 동작에만 의존하는 것은 권장되지 않으며 프로덕션 코드에서는 피해야 합니다. 대신 std::function 또는 사용자 정의 삭제자 클래스를 사용하는 등의 대체 접근 방식이 더욱 강력하며 다양한 구현에서 일관된 동작을 제공합니다.
위 내용은 `std::shared_ptr`은 유형 삭제에도 불구하고 객체 파괴 동작을 어떻게 보존합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!