如何解决我应该如何通过调用 C 风格的接口在 cpp 中管理我的内存?
我想在我的代码中使用智能指针管理指针,但是我必须调用旧的 C 样式接口来获取指针,如下所示:
void getPointer(T** pT,int* pSize);
用户传递一个空指针 Pt 并返回一个指针,我想在我的代码中使用智能指针来管理它
std::shared_ptr<T> ptr;
我应该如何编写代码?有人告诉我使用 get() 方法不是一个安全的主意。 另一个问题是,我应该如何安全地将存储在智能指针中的内存复制到原始指针? (或恶)
解决方法
您可以从 std::shared_ptr<T>
构造 std::shared_ptr<T[]>
(或 T*
)。如果 T
(s) 没有用 new
([]
) 分配,您将需要为共享指针提供正确的释放。
假设那个 C 接口中有一个 void returnPointer(T* pT,int size);
。
struct C_interface_deleter {
void operator()(T* ptr) { returnPointer(ptr,size); }
int size;
};
void use_C_interface() {
T* raw;
int size;
getPointer(&raw,&size);
std::shared_ptr<T> ptr(raw,C_interface_deleter{ size });
// stuff involving ptr
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。