我可以将shared_ptr与malloc和free一起使用吗?
Yes.
谁能指出我的示例代码库。
您需要提供一个自定义删除器,以便使用以下方式释放内存free
而不是默认的delete
。这可以是一个指向free
函数本身:
shared_ptr<void> memory(malloc(1024), free);
请记住malloc
and free
只处理原始内存,并且您负责正确创建和销毁您可能想要保留在该内存中的任何重要对象。
如果我在应用程序中创建shared_ptr并将此指针传递给另一个函数(如果它们使用malloc或calloc)。它会影响任何功能吗?
我不太明白这个问题。你可以用这个shared_ptr
如果您要问的话,可以与“正常”共享指针互换。类型擦除确保指针的用户不会受到不同类型删除器的影响。与任何共享指针一样,如果使用以下命令提取原始指针,则必须小心一点get()
;具体来说,不要做任何可能free
它,因为您已经不可撤销地将所有权分配给共享指针。
我们调用了一些接受双指针并填充其应用程序内的结构并使用 malloc 的函数,我们可以将这些指针分配给shared_ptr吗?
我猜你的意思是这样的:
double * make_stuff() {
double * stuff = static_cast<double*>(malloc(whatever));
put_stuff_in(stuff);
return stuff;
}
shared_ptr<double> shared_stuff(make_stuff(), free);
更新:我没有发现短语“双指针”,我假设您的意思是使用指针的 C 风格来模拟引用来模拟返回值;你也可以那样做:
void make_stuff(double ** stuff);
double * stuff = 0;
make_stuff(&stuff);
shared_ptr<double> shared_stuff(stuff, free);
如何处理 realloc 和 calloc
可以用以下结果初始化共享指针calloc
,或任何其他返回要释放的内存的内容free
。你不能使用realloc
, since shared_ptr
已获得原始指针的所有权,并且在不调用的情况下不会释放它free
.