【问题标题】:Transfer ownership from std::vector to std::shared_ptr将所有权从 std::vector 转移到 std::shared_ptr
【发布时间】:2014-10-24 14:04:02
【问题描述】:

我有一个函数 foostd::vector<char> 作为参数,并调用另一个函数 barstd::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
}

如何将向量底层数组的所有权转移到 shared_ptr?

向量很大(4MB),所以我想避免从向量复制到另一个字符数组。

【问题讨论】:

  • std::shared_ptr&lt;char&gt; 是指向单个字符的指针。它不能拥有char 的数组。
  • @japreiss:其实可以,因为std::shared_ptr的删除器是类型擦除的。如果它是这样构造的std::shared_ptr&lt;char&gt;(new char[65535], std::default_delete&lt;char[]&gt;());,那么它是完全有效的。但我怀疑 OP 是否真的这样做了。
  • @japreiss 更重要的是:是否有任何理由曾经有一个指向char的指针(智能或其他)?
  • @tcb 您从vector&lt;char&gt;shared_ptr&lt;char[]&gt; 的转换中获得了什么?
  • 我只拥有foo,向量是从另一个库传递给我的,我必须将它传递给位于另一个库中的bar

标签: c++ c++11 vector visual-studio-2013


【解决方案1】:

你不能。除了将其移动到另一个向量之外,没有其他方法可以释放向量对其内存的所有权。

如果您可以将bar 修改为std::vector&lt;char&gt;,那么您可以通过移动向量来转移所有权,而无需复制它。

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2016-01-30
    • 2011-09-13
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多