std :: unique_ptr :: get有什么意义呢?

std::unique_ptr::get一个unique_ptr在第一个地方的目的? 我会期望这个函数改变它的状态,所以它不再有指针。 是否有一个std :: unique_ptr :: get的实际有用的使用?

每当需要将原始指针传递给C函数时,都会使用它:

 std::unique_ptr<char[]> buffer( new char[1024] ); // ... fill the buffer int rc = ::write( fd, buffer.get(), len ); 

std::unique_ptr安全地提供了独特的所有权语义。 但是,这并不排除非拥有指针的需要。 std::shared_ptr有一个非拥有对手, std::weak_ptr 。 原始指针作为std::unique_ptr的非拥有对象来操作。

我倾向于遵循的规则是:如果被调用者没有使用生命/所有权,不要将其传递给智能指针; 相反,传入一个原始的C ++参考(首选)或原始指针。 我发现把所有权的关注与使用分开的做法更加清洁和灵活。

当你的手绑定,你需要传递一个指针, p.get()读取比&*p更好。

有一个函数改变了状态,所以unique_ptr不再包含一个指针,而这个函数被命名为release 。 这对于将所有权转移给其他不提供unique_ptr直接构造的智能指针来说是非常有用的。 任何其他使用风险泄漏资源。

香草萨特有一个很好的解释(约3:40) https://www.youtube.com/watch?v=JfmTagWcqoE

主要的好处是独特的指针会跟踪那个指针有多less个其他引用。 当您使用所有权时,您只能使用唯一的指针。 当你想用这个指针对数据做些什么时,你传递原始指针。

当你需要调用一个C API或devise不佳的C ++ API时,情况就是明显的情况。