我必须公开一个采用char *作为输入参数的API。 char *指向堆上的一堆二进制数据。在这种情况下,调用者必须管理内存分配和删除。
有没有一种方法可以将shared_ptr用作输入参数,而不是原始指针。
void func(char* data)
{
//some operation
}
答案 0 :(得分:1)
如果func
仅观察数据而没有更改,请接受const char *
。调用者可以将指针存储在任何智能指针中,并使用get()
函数来获取裸指针以传递给func
。
如果func
更改了数据,我想从Rust窃取想法并传递std::unique_ptr
并返回std::unique_ptr
。调用者先放弃所有权,然后再返回指针的所有权,但也可能是完全不同的指针。没关系。
如果func
必须修改数据并且必须接受char *
,则只需像以前一样从所需的任何智能指针中使用get()
。只要func
不将指针存储在任何地方都不会中断。