C++ 将所有权从std::vector转移到std::shared\u ptr
我有一个函数C++ 将所有权从std::vector转移到std::shared\u ptr,c++,c++11,vector,visual-studio-2013,C++,C++11,Vector,Visual Studio 2013,我有一个函数foo,它将std::vector作为参数,并调用另一个函数bar,该函数将std::shared\u ptr作为参数 void foo(std::vector<char> arg) { bar(?) // what do i pass to bar here? } void bar(std::shared_ptr<char> arg) { // do something asynchronously } void foo(std::vec
foo
,它将std::vector
作为参数,并调用另一个函数bar
,该函数将std::shared\u ptr
作为参数
void foo(std::vector<char> arg)
{
bar(?) // what do i pass to bar here?
}
void bar(std::shared_ptr<char> arg)
{
// do something asynchronously
}
void foo(std::vector arg)
{
酒吧(?)//我该在这里通过什么去酒吧?
}
空栏(标准::共享参数)
{
//异步地做某事
}
如何将向量的底层数组的所有权转移到共享的\u ptr
向量很大(4MB),因此我希望避免从向量复制到另一个字符数组。您不能。除了将向量移动到另一个向量之外,没有办法释放向量对其内存的所有权
如果您可以修改
bar
以获取std::vector
,则可以通过移动向量来转移所有权,而无需复制它。std::shared\u ptr
是指向单个字符的指针。它不能拥有char
@japreiss的数组:实际上它可以,因为std::shared_ptr
的删除器已被类型擦除。如果它是这样构造的std::shared_ptr(新字符[65535],std::default_delete())代码>,则它是完全有效的。但我怀疑OP是否真的做到了这一点。@Japreis更切中要害的是:有没有任何理由让指针(智能或其他方式)指向char
?@tcb从vector
到shared\u ptr
转换中你得到了什么?我只拥有foo
,这个向量是从另一个库传递给我的,我必须把它传递给另一个库中的条。