我有一个函数,其中回调接收一个event
持有 unique_ptr 实例的data
. char*
我可以通过它来检索event.data.get()
应该给我指针而不是所有权,从而允许对象自由删除它。现在我有另一个函数,它接受一个 unique_ptr 实例,otherdata
当然管理所有权,所以该函数可以自由地释放它。所以我试图data
从回调中获取并将其传递给安全的函数otherdata
。
void cbdata(const DataEvent& event){
char* datatobewritten = event.data.get();
stream.write(std::move(datatobewritten),event.length));
}
上面的示例似乎确实有效,但我不确定这是否是正确的方法。事件是否放弃所有权?如果是这样,放弃所有权是否安全?
为什么这会导致编译器错误:Call to implicitly-deleted copy constructor of 'std::unique_ptr<char []>'
?
void cbdata(const DataEvent& event){
stream.write(event.data,event.length);
}
如果 event.data 给我一个 unique_ptr 并且 stream.write 需要一个 unique_ptr 那么上面的代码不应该正常工作吗?或这个
stream.write(std::move(event.data), event.length);
抱歉,我的 C++ 知识非常有限,所以 unique_ptr 和 move 语义非常混乱。