개체를 공유 할 필요가 없지만 메모리 누수가 발생하지 않도록하고 싶습니다. 이 경우 shared_ptr을 사용하는 것이 맞습니까?auto_ptr의 std :: vector를 사용할 수 없습니다 - shared_ptr을 사용해야합니까?
답변
부스트를 사용하는 경우 boost::ptr_vector이 더 적합 할 수 있습니다.
그렇지 않은 경우 벡터의 요소를 제안하거나 수동으로 삭제하면 shared_ptr
을 사용하거나 수동으로 삭제할 수 있습니다.
유지 관리의 관점에서 보면 shared_ptr
이 가장 좋습니다. 그러나 shared_ptr
은 성능에 대한 벌칙을 부과 할 수 있으며 이는 귀하의 애플리케이션에 중요 할 수도 있고 아닐 수도 있습니다.
과도한 공격이지만 조금 더 좋은 스마트 포인터는 없습니다. 부스트의 포인터 컨테이너를 고려할 수도 있습니다.
C++ 0x에서는 컨테이너에 std::unique_ptr
을 저장할 수있어 사용자의 요구에 더 가깝습니다.
boost :: shared_ptr – amitlicht
+1 unique_ptr의 컨테이너에 +1을 사용 중입니다! – AshleysBrain
Boost.PointerContainer을 사용할 수도 있습니다. shared_ptr
을 사용하면 공유 소유권을 나타냅니다. 확실하다면, 당신의 객체가 컨테이너의 수명에 묶여 있다면, PointerContainer이 더 현명한 설계 방법이 될 것입니다.
낮은 수준의 성능/메모리 사용이 중요한 요구 사항 (모든 경우의 97 %)이 아니라면 shared_ptr로 이동하십시오. 그것은 간단하고 잘 이해됩니다.
소유욕을 더 정확하게 유지하려는 경우 boost::ptr_vector이 더 좋을 수도 있지만 클래스가 다른 메모리를 관리하지 않으면 소멸자에서 수동으로 삭제하는 것만 큼 큰 것은 아닙니다. 우리가 때로는 믿음을 갖기 때문에 죄를 지어주었습니다 .- 나는 큰 RAII 지지자이지만, 때때로 이것을 때때로합니다.
- 1. std :: vector를 어떻게 축소합니까?
- 2. std :: vector를 내보내는 방법
- 3. 반복자를 사용하여 std :: list에서 std :: vector를 초기화하십시오.
- 4. 보호 된 std :: vector를 공개해야합니까?
- 5. ATL CAutoPtr과 STL std :: auto_ptr의 차이점은 무엇입니까?
- 6. Android NDK와 std :: vector를 사용할 때 Eclipse 오류 수정
- 7. XCode + C++에서 std :: vector를 어떻게 사용합니까?
- 8. const 참조 또는 boost :: shared_ptr을 사용해야합니까?
- 9. 맞춤 구조체의 std :: vector를 사용하는 LNK2001
- 10. std :: shared_ptr을 사용하려면 포함 할 헤더는 무엇입니까?
- 11. 초기화시 std :: vector를 미리 채우기 하시겠습니까?
- 12. 개체의 std :: vector를 구조체 배열로 바꾼다
- 13. SWIG : boost :: shared_ptr을 std :: vector에 래핑하는 방법?
- 14. auto_ptr의 dynamic_cast가 실패하는 이유는 무엇입니까?
- 15. RegOpenKeyEx를 사용할 수 없습니다.
- 16. 동적으로 할당 된 배열의 std :: vector를 만드는 방법이 있습니까?
- 17. 직접 창에서 std :: vector를 인덱싱 할 수없는 이유는 무엇입니까?
- 18. 함수에 shared_ptr을 할당하십시오.
- 19. 왜 std :: vector를 사용하여 스택을 만드는 프로그램이 중단됩니까?
- 20. AS3에서 Vector를 사용하는 동안 유형을 찾을 수 없습니다.
- 21. GCC에서 shared_ptr을 사용할 수있는 휴대용 방법
- 22. std :: tr1 :: weak_ptr이있는 컨테이너에서 std :: remove를 어떻게 사용할 수 있습니까?
- 23. 전역 개체에서 호출 된 정적 라이브러리 함수에서 std :: vector를 사용할 때 디버그 어설 션 오류가 발생했습니다.
- 24. QPointer를 std :: map의 키로 사용할 수 있습니까
- 25. std :: invalid_argument를 catch 할 수 없습니다.
- 26. std :: shared_ptr with std containers
- 27. shared_ptr을 boost :: python으로 인스턴스화
- 28. std 'getline'멤버가 없습니다?
- 29. FancyBox를 사용할 수 없습니다.
- 30. UIWebViewDelegate를 사용할 수 없습니다.
벡터에 저장된 객체가 동적으로 할당 되었습니까? 그들은 있어야합니까? –