含有指針的原子變量是否擁有指針的所有權?帶原子變量的指針所有權
考慮下面的代碼片段:
{
std::atomic<Foo*> bar(new Foo());
}
// `bar' went out of scope, did it delete pointer to instance of Foo?
我當然可以推導出,並刪除它自己,或工作以另一種方式在其周圍;但那不是重點。
什麼是定義行爲在這裏,如果有?
含有指針的原子變量是否擁有指針的所有權?帶原子變量的指針所有權
考慮下面的代碼片段:
{
std::atomic<Foo*> bar(new Foo());
}
// `bar' went out of scope, did it delete pointer to instance of Foo?
我當然可以推導出,並刪除它自己,或工作以另一種方式在其周圍;但那不是重點。
什麼是定義行爲在這裏,如果有?
不,只有std::atomic
保證是該對象將從數據競賽中免費。所以你將會釋放指針指向你自己的內存。
如果您需要託管的動態內存容器,請使用unique_ptr或shared_ptr。
第std::atomic<T*>
有一個微不足道的析構函數,它什麼也不做,所以如果它擁有它,它就不能刪除任何東西。
std::atomic<int>
沒有「自己」的整數,它只是存儲值,同樣std::atomic<int*>
只是存儲的值,沒有隱含的所有權或釋放。
謝謝您的回覆。爲了完整起見,一種(適當的)方式是:'在'bar'超出作用域之前'刪除bar.load(..)'?我知道'聰明'的指針,但我想在這裏有一個裸指針:-) – pauluss86
@ pauluss86這很好,但如果你決定這樣做,那麼你將不得不強制,沒有人使用內部刪除後的小節的值。 – Caesar
在真實場景中,它是一個完全私有的成員,僅在內部使用。我只是在實現封裝類的析構函數,因此是個問題。在選擇答案之前,我會將問題保留幾個小時。 – pauluss86