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
,这个向量是从另一个库传递给我的,我必须把它传递给另一个库中的
条。