2014-01-28 61 views
1

含有指針的原子變量是否擁有指針的所有權?帶原子變量的指針所有權

考慮下面的代碼片段:

{ 
    std::atomic<Foo*> bar(new Foo()); 
} 

// `bar' went out of scope, did it delete pointer to instance of Foo? 

我當然可以推導出,並刪除它自己,或工作以另一種方式在其周圍;但那不是重點。

什麼是定義行爲在這裏,如果有?

回答

5

不,只有std::atomic保證是該對象將從數據競賽中免費。所以你將會釋放指針指向你自己的內存。

如果您需要託管的動態內存容器,請使用unique_ptrshared_ptr

+0

謝謝您的回覆。爲了完整起見,一種(適當的)方式是:'在'bar'超出作用域之前'刪除bar.load(..)'?我知道'聰明'的指針,但我想在這裏有一個裸指針:-) – pauluss86

+0

@ pauluss86這很好,但如果你決定這樣做,那麼你將不得不強制,沒有人使用內部刪除後的小節的值。 – Caesar

+0

在真實場景中,它是一個完全私有的成員,僅在內部使用。我只是在實現封裝類的析構函數,因此是個問題。在選擇答案之前,我會將問題保留幾個小時。 – pauluss86

1

std::atomic<T*>有一個微不足道的析構函數,它什麼也不做,所以如果它擁有它,它就不能刪除任何東西。

std::atomic<int>沒有「自己」的整數,它只是存儲值,同樣std::atomic<int*>只是存儲的值,沒有隱含的所有權或釋放。