代码之家  ›  专栏  ›  技术社区  ›  Mikhail T.

为什么唯一的ptr<T>不能从*T赋值?

  •  2
  • Mikhail T.  · 技术社区  · 4 年前

    举个简单的例子,这段代码“错”在哪里?

    unique_ptr<char> meow = strdup("meow");
    

    是否向 unique_ptr unique_ptr<T> T* .

    为什么不呢 <memory> 提供这种看似直观的快捷方式?这仅仅是一种疏忽,还是出于某种原因,这种可转让性从根本上说是一个坏主意?

    1 回复  |  直到 4 年前
        1
  •  8
  •   NathanOliver    4 年前

    为什么不呢 <memory> 提供这种看似直观的快捷方式?

    想象一下你有

    int bar;
    {
        int * foo = &bar;
        std::unique_ptr<int> uptr = foo;
        // use uptr
    }
    

    什么时候? uptr 超出范围,它将尝试 delete pointer; delete 在未由分配的内存上 new

    如果你真的确定要构造一个 unique_ptr 从现有的指针,您知道默认的deleter是您想要的,那么您可以使用

    auto pointer_name = std::unique_ptr<type>(pointer_i_know_needs_to_be_deleted);