c – 将从方法返回的原始指针存储到智能指针中

前端之家收集整理的这篇文章主要介绍了c – 将从方法返回的原始指针存储到智能指针中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
场景:
我正在使用旧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.

猜你在找的C&C++相关文章