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()
向读者明确表示"这是缓冲区内的原始指针。