我正在重寫一些代碼以消除全局變量,並且讓一個構造函數/析構函數處理某些第三方庫資源的清理,但是我擔心一些代碼會從類初始化程序列表中的其他成員初始化一個成員。我可以使用初始化器列表中初始化的C++類成員,稍後在列表中嗎?
class MyPodofoDocument {
public:
// generates pdf to stream
MyPodofoDocument(std::stringstream *pStringStream)
: device(pStringStream), document(&device)
{
}
private:
PoDoFo::PdfOutputDevice device;
PoDoFo::PdfStreamedDocument document;
PoDoFo::PdfPainter painter;
};
使用這個類並不需要看到所有進入使用庫的詳細信息的代碼,但我隱瞞他們的方式使得它依賴於使用成員初始化其他成員,它擊中前構造函數的實際代碼塊,它有一個有效的指針。
它在單元測試框架中工作,所以我的問題基本上是「這是好的,便攜的和安全的嗎?」
此外,獲取地址或將引用綁定到尚未構建的成員是合法的(即,如果接收者不使用*對象,但只存儲引用/指針)。 – 2013-02-19 20:48:25
傳遞是合法的,但在語義上是錯誤的,因爲你將一個指針傳遞給尚未構造的東西。 – 2013-02-19 20:53:13
@AlexChamberlain:它一定沒有錯,但可能需要重新檢查。 – GManNickG 2013-02-19 21:12:04