C의 C++ 라이브러리에서 일부 API를 래핑해야합니다. 예를 들어 here과 같이 클래스 개체, extern "C"등에 대한 불투명 포인터를 사용하여이 작업을 수행했습니다. 그러나이 새로운 라이브러리는 참조 계산 스마트 포인터를 광범위하게 사용합니다. 스마트 포인터가있는 상태에서 랩핑을 수행하는 방법을 잘 모르겠습니다.C에서 스마트 포인터를 반환하는 C++ 함수를 어떻게 랩핑합니까?
SmartPointer<MyClass> foo() {
SmartPointer<MyClass> ret(new MyClass); // Create smart pointer ret
ret->DoSomething(); // Do something with ret
return ret;
}
어떻게 C에서 foo()
을 포장 할 수 있습니다 : 예를 들어,이 C++ 라이브러리는 다음과 같은 기능을 가지고 가정 해 봅시다? 분명히, 내가 MyClass
개체를 참조하는 C 함수에서 사용할 수있는 불투명 한 포인터 (예 : void*
또는 빈 구조체 포인터)가 필요합니다. 내가 생각한 첫 번째 옵션은 ret
에서 MyClass
개체를 추출하여 void*
으로 전송하는 것입니다. 그러나이 void*
은 스마트 포인터 (잘못된 경우 올바른 수정)로 자동 삭제로 인해 범위 밖으로 나가면 ret
이 매달리게됩니다.
다른 옵션은 스마트 포인터 (예 : retPtr
)에 포인터를 할당하고 *retPtr=ret
을 수행 한 다음 retPtr
에 대한 불투명 포인터를 생성하는 것입니다. 나는이 옵션이 효과가있을 것이라고 생각하지만 이것이 최선의 방법인가?
도움을 주시면 감사하겠습니다.
지난 제안에 동의합니다. –
어떤 종류의 스마트 포인터, stdlib에 SmartPointer라는 클래스가 없다는 것을 알고 있습니다. 이것은 엄청나게 문제의 스마트 포인터의 의미에 달려 있습니다 ... – Vality
C 라이브러리는 실제로'ObjectType'의 멤버에 액세스해야합니까? 아니면 잠시 동안 포인터를 잡고 나중에 놓을 수 있습니까? 또한'ObjectType'과'MyClass' 사이의 관계는 무엇입니까? –