나는 std::shared_ptr
으로 일하고 있으며, 소프트웨어 개발 중에 나는몇 가지를 만났습니다.이 경우 메모리 관리에 의문을 갖습니다. 나는 함수에서 원시 포인터를 주었고 제 코드에서 을 std::shared_ptr
(std가 아니라 부스트가 아닌)으로 변환하는 제 3 자 라이브러리를 사용했습니다. 그런데 의 차이점은 무엇입니까?).C++ 원시 포인터와 std :: shared_ptr
ClassA* raw = new ClassA;
std::shared_ptr<ClassA> shared(raw);
(의 그것이 함수 에 로컬로 선언되었다 가정 해 봅시다 지금은 기능을 종료하고) : 그럼 나는 다음과 같은 코드가 있다고 가정 해 보자. 원시 포인터가 가리키고 있기 때문에 ClassA
개체가 여전히 존재합니까?
왜 shared_ptr은 원시 포인터를 알지 못하기 때문에 shared_ptr은 원시 포인터를 고려하지 않습니다. shared_ptr을 어떻게 구현할 것인가를 생각한다면, 데이터에 대한 원시 포인터가 있는지를 알 수 없다는 것을 알 수 있습니다. – Wutz
+1. 또한,이 때문에'shared_ptr'을 만들 때 같은 줄에 객체를'new'해야합니다. 더 나은, 사용 ['make_shared'] (http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared) –
사실, 원시 포인터가 있는지 알아내는 방법이 없다는 것에 동의합니다. 개체를 가리키는. 이 경우에는 원시 포인터에 대해 위험 할 수 있습니다. 왜냐하면 shared_ptr이 범위를 벗어 났을 때 shared_ptr이 파괴 할 것이기 때문입니다. – ISTB