为什么std :: unique_ptr有一个“get()”成员函数?

时间:2014-10-30 22:40:03

标签: c++ pointers smart-pointers

Isn' t std::unique_ptr是否是一个指向内存的唯一指针,没有其他指针指向此内存?

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

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

1 个答案:

答案 0 :(得分:3)

想象一下:

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()清楚地告诉读者&#34;这是缓冲区内的原始指针。