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