2013-07-22 6 views
1

std::unique_ptr에 대한 독서는 (다른 스마트 포인터와 함께) 프로젝트에서 내부적으로 (특히 Could an optimizing compiler remove all runtime costs from std::unique_ptr? 이후) 포인터에 대한 최선의 선택이라는 확신을주었습니다. 그러나 인터페이스에서 무엇을해야할지 아직 확실하지 않습니다. . 나는 다양한 C++ ABI가 어떻게 작동하는지 완전히 모르지만, 만약 이것이 바보 같은 질문이라면 저에게 곰을 지어주십시오. 그러나 포인터를 가지고 있거나 리턴하는 함수, 포인터 멤버를 가진 클래스/구조체 등은 unique_ptr을 사용하는 것으로 대체 될 수 있습니다. (어쩌면 unique_ptr 심판을 사용하여?) 재 컴파일을하지 않고도? C 코드가 unique_ptr을 사용하여 C++ 인터페이스와 상호 작용할 수 있습니까?원시 포인터와 std :: unique_ptr ABI 호환 가능합니까?

+0

메모리의 소유권 *을 함수로 옮기지 않는 한, unique_ptr을 취하는 것은 아무런 성과가 없습니다. 어디에서나'delete'를 사용하는 것을 멈추고 적절한 소유권 의미론을 가진 스마트 포인터를 사용하십시오. 벌거 벗은 포인터를 사용하는 함수는 해당 포인터의 소유권을 주장하지 않으며 함수의 범위 밖에서 액세스하지 않아야합니다 (예 : 전역 또는 무언가에 저장). [여기에 unique_ptrs와 그 의미를 전달하는 방법에 대한 설문 조사] (http://stackoverflow.com/questions/8114276/how-do-i-pass-a-unique-ptr-argument-to-a-constructor-oror -a-function/8114913 # 8114913). –

답변

5

AFAIK, 보장이 없습니다. sizeof(unique_ptr<T>) == sizeof(T*), 아니요.

그러나 같은 크기 일지라도 임의의 ABI가 "value"인수와 동일한 메커니즘으로 포인터 인수를 전달한다는 보장이 없습니다.