什么是std :: unique_ptr :: get

时间:2012-05-29 15:21:05

标签: c++ c++11 pointers unique-ptr

std::unique_ptr::get首先没有击败拥有unique_ptr的目的吗? 我本来期望这个函数改变它的状态,所以它不再有指针。 是否有实际有用的std :: unique_ptr :: get?

6 个答案:

答案 0 :(得分:60)

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

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

答案 1 :(得分:42)

std::unique_ptr安全地提供了唯一的所有权语义。但是,这并不排除对非拥有指针的需求。 std::shared_ptr有一个非拥有对手std::weak_ptr。原始指针作为std::unique_ptr的非拥有对手运行。

答案 2 :(得分:24)

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

答案 3 :(得分:16)

当你的双手被束缚而你确实需要传递指针时,p.get()读数优于&*p

有一个函数可以改变状态,因此unique_ptr不再存在指针,并且该函数名为release。这对于将所有权转移到其他不提供unique_ptr直接构造的智能指针非常有用。任何其他使用都有泄漏资源的风险。

答案 4 :(得分:3)

Herb Sutter有一个很好的解释(3:40左右) https://www.youtube.com/watch?v=JfmTagWcqoE

主要优点是唯一指针跟踪该指针有多少其他引用。在使用所有权时,只能使用唯一指针。如果要使用该指针对数据执行某些操作,则传递原始指针。

答案 5 :(得分:0)

当您需要调用C API或设计糟糕的C ++ API时,情况显而易见。

相关问题