[英]Calling other functions from a C++ constructor
在初始化所有成員變量之后,從構造函數的主體中調用非虛擬函數(包括賦值運算符)是否安全?
是的,構造函數可以調用非虛擬函數。
在調用賦值運算符之前,請確保所有成員均已正確初始化,否則對象將處於不一致狀態。
當您要從構造函數調用虛擬函數時,請使用“虛擬構造函數慣用法”。
是的-您可以自由調用其他非虛擬成員函數。 如果最派生的基類提供您恰巧想要的實現,則可以調用虛擬函數。
確實,在C ++ 11讓一個構造函數調用另一個構造函數之前,多個構造函數調用支持函數執行共享初始化並不罕見。
在這種情況下可以調用operator=
-至關重要的是,在分配新狀態之前它可能嘗試進行的任何清理都會找到可操作的合理值-例如,將指針設置為nullptr
以便delete
是安全的。
請注意,您調用的其他任何允許導致構造函數退出的異常(即未捕獲和抑制)都將阻止對象的存在-與直接從構造函數拋出的異常相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.