std::unique_ptr::get
首先没有击败拥有unique_ptr的目的吗?
我本来期望这个函数改变它的状态,所以它不再有指针。
是否有实际有用的std :: unique_ptr :: get?
答案 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时,情况显而易见。