2010-03-18 165 views

回答

13

無法複製的類。 STL容器要求對象可複製,因爲容器擁有該對象的副本,並且需要能夠移動它。

+7

儘管*指針*(和智能指針)到無法複製的類都可以。 – 2010-03-18 05:28:53

+0

除了'std :: auto_ptr'。不要這樣做!雖然'std :: tr1 :: shared_ptr'沒問題。 – Nate 2010-03-22 19:30:45

4

根據您執行的操作,除了可以爲存儲在容器中的對象進行復制之外,您通常還需要一個默認構造函數。對於傳遞給算法的對象,還有其他要求,例如可調用或可增量。這些要求是有據可查的。

9

我最不喜歡放入STL容器的東西是std :: auto_ptr ...非常糟糕的事情發生。 ..大多數意想不到的失去我認爲的對象。

一般來說,任何不可複製的東西都不能進入容器 - 你會得到編譯錯誤。異常複製語義(如auto_ptr)的東西不應該放在容器中(但你可能不會得到任何編譯器錯誤)。由於容器可以自由創建各種臨時副本。

我認爲,沒有一個「理智」的默認構造函數和賦值運算符,你也有一些痛苦。

2

類的析構函數可能不會拋出異常......以及無級永遠應該在析構函數

0

依賴於容器,以獲取更多信息的扔,該標準的第23條規定了所有容器的要求,方法。

爲了安全起見,雖然,你應該假設如下始終要求: 默認構造和拷貝建設

相關問題