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时,情况就是明显的情况。