是不是std::unique_ptr
被設計成一個指向內存的唯一指針,並且沒有其他指針指向這個內存?爲什麼std :: unique_ptr有一個「get()」成員函數?
那麼爲什麼std:unique_ptr
有一個get()
成員函數,它返回一個原始指針到std::unique_ptr
所擁有的內存?
所以通過使用get()
我們可以創建衆多業主(原始指針)到std::unique_ptr
的記憶,這不是沒有意義嗎?
是不是std::unique_ptr
被設計成一個指向內存的唯一指針,並且沒有其他指針指向這個內存?爲什麼std :: unique_ptr有一個「get()」成員函數?
那麼爲什麼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()
明確規定對讀者說:「這是緩衝區內的原始指針
「如果你沒有得到(),你會怎麼做?」 '&* buffer' – 2014-10-30 22:54:20
沒錯。更好的答案是,讓'get'可以讓你清楚地知道你從一個獨特的指針中提取了一個裸指針,而不是要求人們從'&*'或者註釋中找出它。 – 2014-10-30 22:56:14
不 – 2014-10-30 22:41:11
他們完全控制了他們指向的內存,爲什麼他們不會被認爲是所有者? – user2591935 2014-10-30 22:42:14
只要你把指針放到你分配的內存中到一個'std :: unique_ptr'(在正確的範圍),你可以安全地使用原始指針(通過'get()'獲得),並知道它將在適當的時候被刪除。 – Galik 2014-10-30 22:45:43