C에서 다양한 유형의 포인터를 사용해야 하는 경우
C에서는 객체 소유권과 수명을 관리하기 위해 다양한 포인터 유형을 사용할 수 있습니다. 이 문서에서는 공유 소유권, 고유 소유권, 비소유권 등 다양한 시나리오에 적합한 포인터 유형을 선택하는 방법에 대한 지침을 제공합니다.
공유 소유권:
- std::shared_ptr: 여러 객체가 리소스의 소유권을 공유해야 하고 어떤 객체가 공유될지 불분명할 때 사용합니다. 마지막으로 사용합니다.
-
std::weak_ptr: 수명에 영향을 주지 않고 리소스를 관찰하는 데 사용합니다. shared_ptrs 간의 참조 순환을 끊는 데 사용하지 마세요.
고유 소유권:
-
std::unique_ptr: 기본값 단일 개체가 리소스를 소유하는 스마트 포인터에 대한 선택입니다. 삭제기 템플릿 인수를 통해 객체 삭제를 사용자 정의할 수 있습니다.
-
boost::intrusive_ptr: 리소스가 이미 참조 횟수 관리를 제공하는 경우의 경량 옵션입니다.
아니요 소유권:
-
원시 포인터(T*): 참조 개체보다 오래 지속되는 것으로 알려진 리소스에 대한 비소유 참조 또는 null 허용 여부 및 재설정 가능성에 사용합니다.
-
참조: null이 아니고 소유하지 않는 참조에 선호됩니다. resources.
추가 참고 사항:
-
std::auto_ptr: C 11에서 더 이상 사용되지 않습니다. std::unique_ptr.
-
Boost::shared_array 및 boost::scoped_array로 대체: std::unique_ptr>에 대한 대안 ; const> 및 std::unique_ptr
- 동시 실행 시나리오의 경우, 리소스 활성 상태를 확인할 때 경쟁 조건을 피하기 위해 만료()를 주의해서 사용해야 합니다.
if(!wptr.expired()) {
// Potential race condition
something_assuming_the_resource_is_still_alive();
}
로그인 후 복사
위 내용은 어떤 C 포인터 유형을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!