将所有权从std::vector转移到std::shared_ptr

3

我有一个名为 foo 的函数,它以一个 std::vector<char> 作为参数,并调用另一个名为 bar 的函数,该函数以一个 std::shared_ptr<char> 作为参数。

void foo(std::vector<char> arg)
{
    bar(?) // what do i pass to bar here?
}

void bar(std::shared_ptr<char> arg)
{
    // do something asynchronously
}

我怎样将vector的底层数组转让给shared_ptr?

由于vector很大(4MB),因此我希望避免从向量中复制到另一个char数组。


1
std::shared_ptr<char>是指向单个字符的指针。它不能拥有字符数组。 - japreiss
4
实际上可以,因为std::shared_ptr的删除器是类型擦除的。如果像这样构造它:std::shared_ptr<char>(new char[65535], std::default_delete<char[]>());,那么它就是完全有效的。但我怀疑楼主实际上并没有这样做。 - Siyuan Ren
更切题:是否有任何理由使用指向char的指针(智能或其他)? - James Kanze
@tcb 从将vector<char>转换为shared_ptr<char[]>,您获得了什么? - Pradhan
我只拥有 foo,这个向量是从另一个库传递给我的,而我必须将其传递给另一个库中的 bar - tcb
1个回答

5

无法这样做。除非将其移动到另一个向量中,否则无法释放向量对其内存的所有权。

如果可以修改bar以采用std::vector<char>,则可以通过移动向量而不是复制它来转移所有权。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接