情形:
我使用从旧的C++库返回一个原始指针到一个方法SomeClass,其中SomeClass从一个库头一个导出类说SomeClass.h
以下是LibraryMethod我使用的签名:
SomeClass* LibraryMethod();
Run Code Online (Sandbox Code Playgroud)
我没有权限更改库.我只使用二进制和公共标题,这是一个典型的场景.
我不想在我的代码中使用原始指针.因此,我有一个共享指针到SomeClass在我使用库API的代码的一部分.
std::shared_ptr<SomeClass> some_class;
Run Code Online (Sandbox Code Playgroud)
我这样初始化,以避免存储原始指针 SomeClass
some_class = (std::shared_ptr<SomeClass>)LibraryMethod();
Run Code Online (Sandbox Code Playgroud)
这基本上有效,但我想在这里了解细节
问题:
以上是正确的技术吗?
我在这里造成泄漏吗?
有没有更好的技术来处理这种情况?
你应该把它称为
auto some_class = std::shared_ptr<SomeClass>(LibraryMethod());
Run Code Online (Sandbox Code Playgroud)
这假设LibraryMethod是分配指针并为您提供内存的所有权.
按照目前的编写,您尝试将原始指针强制转换为std::shared_ptr使用C样式转换(可能导致a reinterpret_cast).相反,您希望使用返回的原始指针构造一个std::shared_ptr.