我有一個類層次結構,我知道給定的類(B)總是會被派生到第二個類(D)中。在B的構造函數中,如果我確信在整個構造完成之前沒有人會嘗試使用它,將this
指針靜態轉換爲D *是安全的嗎?在我的情況下,我想將對象的引用傳遞給另一個類(A)。施工期間是否向下傾斜?
struct A
{
D & d_;
A(D & d) : d_(d) {}
};
struct D; //forward declaration
struct B
{
A a;
B() : a(std::static_cast<D&>(*this)) {}
};
struct D : public B
{};
此代碼是否安全?
這就提出了一個什麼樣的價值類d是增加的問題,如果B *總是*一D. – JohnMcG 2009-07-28 13:42:58
B是定義一個類模板或不基於它的模板參數的成員函數。有幾個這樣的類模板,然後由D繼承以提供依賴於模板參數的接口。 – 2009-07-29 06:54:58