2014-10-30 623 views
1

是不是std::unique_ptr被設計成一個指向內存的唯一指針,並且沒有其他指針指向這個內存?爲什麼std :: unique_ptr有一個「get()」成員函數?

那麼爲什麼std:unique_ptr有一個get()成員函數,它返回一個原始指針到std::unique_ptr所擁有的內存?

所以通過使用get()我們可以創建衆多業主(原始指針)到std::unique_ptr的記憶,這不是沒有意義嗎?

+0

不 – 2014-10-30 22:41:11

+0

他們完全控制了他們指向的內存,爲什麼他們不會被認爲是所有者? – user2591935 2014-10-30 22:42:14

+0

只要你把指針放到你分配的內存中到一個'std :: unique_ptr'(在正確的範圍),你可以安全地使用原始指針(通過'get()'獲得),並知道它將在適當的時候被刪除。 – Galik 2014-10-30 22:45:43

回答

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()明確規定對讀者說:「這是緩衝區內的原始指針

+1

「如果你沒有得到(),你會怎麼做?」 '&* buffer' – 2014-10-30 22:54:20

+1

沒錯。更好的答案是,讓'get'可以讓你清楚地知道你從一個獨特的指針中提取了一個裸指針,而不是要求人們從'&*'或者註釋中找出它。 – 2014-10-30 22:56:14

相關問題