回答
移動構造函數一般允許拋出嗎?是。 應該他們?一般來說,你所做的任何事情都不應該是任何可能拋出的東西。你不應該分配內存,調用其他代碼或類似的東西。編寫移動構造函數的唯一原因是與其他人的內存指針和對象引用一起潛伏。您應該複製一些基本類型並將其他對象中的值歸零。那些東西不應該扔掉。
所以儘管它被允許,但這不是一個好主意。如果你這樣做,重新考慮你在移動操作中做了什麼。
我認爲沒有stl類型扔在移動構造函數?我應該擔心的唯一的地方是美元? – ronag 2012-02-12 17:10:12
@ronag:如果std :: type在其移動構造函數中沒有'noexcept',則允許拋出。特別是,基於節點的容器的某些實現具有投擲移動構造器,因爲每個容器都必須包含堆分配的末端節點,甚至是空容器。這些相同容器的其他實現沒有這種設計,因此可以(並且被允許)具有noexcept移動構造函數。 – 2012-02-12 17:27:22
- 1. 確定抽象基類的構造函數是否爲noexcept?
- 2. C++標準要求C連接函數是否爲「noexcept」?
- 3. 當移動構造函數被調用
- 4. OOP - 是否需要構造函數?
- 5. 爲什麼調用複製構造函數而不是移動構造函數?
- 6. 什麼是需要在Unique Pointers中移動構造函數和移動賦值構造函數?
- 7. 移動構造函數C++
- 8. 與移動構造函數
- 9. 爲什麼不移動構造函數?
- 10. 實現構造函數是否阻止自動移動語義?
- 11. 移動構造函數不移動
- 12. 移動構造函數並移動類
- 13. 爲什麼移動構造函數不被調用?
- 14. 爲什麼我的C++移動構造函數未被調用?
- 15. 向量移動構造函數比複製構造函數要慢
- 16. 對於mov構造函數,noexcept總是必需的嗎?
- 17. Java Enum構造函數是否爲private?
- 18. 與移動構造函數混淆:無法調用移動構造函數
- 19. 如何檢測一個類是否有移動構造函數?
- 20. Move構造函數調用基類移動構造函數
- 21. 移動構造函數和非常拷貝構造函數
- 22. 是否需要定義來自不同類的移動構造函數?
- 23. 強制複製構造函數而不是移動構造函數
- 24. 移動構造函數的這個實現是否會拋棄移動語義?
- 25. 是一個私人移動構造函數來防止移動?
- 26. JPA:是否需要爲空的默認構造函數?
- 27. 構造函數被「調用」與構造函數被「執行」?
- 28. C++ - 構造函數,複製構造函數,移動構造函數,析構函數
- 29. 爲什麼移動構造函數不是調用?
- 30. 當一個構造函數被顯式調用時,是否構造了構造函數和成員變量?
我沒有看到關於移動構造函數不允許拋出的標準中的任何內容,但我確實看到「類X的隱式聲明的移動構造函數的形式爲 'X :: X(X &&)'' 「,我在那裏看不到」不接受「。 – 2012-02-12 15:15:00
在最後的草稿中,我沒有看到針對任何函數聲明瞭'noexcept' ... – ronag 2012-02-12 15:20:31
@ronag:你確定你在看?因爲我打開了N3337,並且只搜索了「'noexcept」,並立即獲得了一些類的「交換」功能。 – 2012-02-12 17:03:29