我应该如何通过调用 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
}