为什么 std::unique_ptr 具有"get()"成员功能?

Why does std::unique_ptr has a "get()" member function?

本文关键字:功能 get 成员 具有 std unique ptr 为什么      更新时间:2023-10-16

std::unique_ptr不是被设计成一个指向内存的唯一指针,而其他指针不应该指向这个内存吗?

那么为什么std:unique_ptr有一个get()成员函数,它返回一个指向std::unique_ptr拥有的内存的原始指针呢?

因此,通过使用get(),我们可以创建许多指向std::unique_ptr内存的所有者(原始指针),这不是毫无意义吗?

想象一下:

void process_file()
{
   const int max_size = 10000; 
   std::unique_ptr<char[]> buffer(new char[max_size]); 
   ifstream f("myfile.txt"); 
   f.read(buffer.get(), max_size); 
   ... 
   ... process buffer
   ...
}

如果没有get(),你会怎么做?unique_ptr不能按原样传递给istream::read

好吧,正如评论所说,你可以通过使用&*buffer来做到这一点,但这远不容易理解——使用buffer.get()向读者明确表示"这是缓冲区内的原始指针。