2013-03-15 61 views
5

在C++ 11中我們應該總是使用unique_ptr還是shared_ptr而不是new/delete?性能如何,智能指針是否慢得多?C++ 11智能指針總是代替新的/刪除?

+14

'unique_ptr'被設計爲零成本抽象。學會停止擔心和愛炸彈。 – 2013-03-15 12:45:36

+9

我們如何使用智能指針**而不是**'new'和'delete'。我們必須用**'new'來使用它們**,以避免'delete' – iammilind 2013-03-15 12:46:48

+4

@iammilind'make_shared'並且我還使用'make_unique'的實現。當然,它仍然在內部使用'new'。 – Cubic 2013-03-15 12:50:22

回答

7

unique_ptr與使用原始指針相比,沒有(不應該)有任何運行時開銷。 shared_ptr確實有一些內存和時間開銷(多少取決於實現)。如果實際需要的行爲類似於shared_ptr(即,沒有其他實現可能會更快或更高內存效率),則此處的開銷可能很容易爲零。

這並不是說你永遠不會在你的代碼中使用新的/刪除,但它不是你一直在做的事情。

2

我寧願的shared_ptr來處理原始內存因爲 -

1)它遵循RAIICounted body成語。

2)保證對象被銷燬,即使發生異常也會釋放內存。

3)不再需要決定何時進行新建/刪除操作。

+0

點2是不正確的。如果一個shared_ptr指向一個包含shared_ptr的對象,該對象以某種方式返回第一個。你將有一個內存泄漏。編輯:所以你仍然需要知道你有或沒有智能指針。 – Tim 2013-03-15 14:17:07

+0

點2爲真,循環引用是一個「有效」狀態。 ''shared_ptr'只給你'如果'ref_count == 0'它的調用'delete'。 – Yankes 2013-03-15 19:02:21