C++ 我应该如何通过调用C风格接口来管理cpp中的内存?
我想在代码中使用智能指针管理指针,但我必须调用旧的C风格接口来获取指针,如下所示:C++ 我应该如何通过调用C风格接口来管理cpp中的内存?,c++,c++11,C++,C++11,我想在代码中使用智能指针管理指针,但我必须调用旧的C风格接口来获取指针,如下所示: void getPointer(T** pT, int* pSize); 用户传递一个空指针Pt并返回一个指针,我想在我的代码中使用智能指针来管理它,如 std::shared_ptr<T> ptr; std::shared_ptr ptr; 我应该如何编写代码?我被告知使用get()方法不是一个安全的想法。 另一个问题是,我应该如何安全地将存储在智能指针中的内存复制到原始指针?(或反之)您可以
void getPointer(T** pT, int* pSize);
用户传递一个空指针Pt并返回一个指针,我想在我的代码中使用智能指针来管理它,如
std::shared_ptr<T> ptr;
std::shared_ptr ptr;
我应该如何编写代码?我被告知使用get()方法不是一个安全的想法。
另一个问题是,我应该如何安全地将存储在智能指针中的内存复制到原始指针?(或反之)您可以从
T*
构建std::shared\u ptr
(或std::shared\u ptr
)。如果未为T
(s)分配new
([]
),则需要为共享指针提供正确的解除分配
假设存在一个void返回指针(T*pT,int size)代码>在该C接口中
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
}
struct C_interface_deleter{
void运算符()(T*ptr){returnPointer(ptr,size);}
整数大小;
};
无效使用C_接口(){
T*生的;
整数大小;
getPointer(&raw,&size);
std::shared_ptr ptr(原始、C_接口_deleter{size});
//涉及ptr的东西
}
一切都取决于谁拥有什么。(智能“指针”更多地是关于所有权规则的形式化,而不是关于内存管理。)getPointer
如何处理指针?get()
将不起作用。您应该首先从C API获取指针,然后从该API创建智能指针。但是,如果这真的是C,请检查内存是否分配了new[]
,因为如果它使用malloc
,您将需要自定义删除程序。我们将pT
作为nullptr
传递,并且在C接口中,它将new
一个T类型指针。以前,在我们的代码中,我们自己删除指针。这是非常旧的代码风格,很难管理指针。