3
這是否符合標準?它是標準的C++分配一個成員指針的構造函數初始值設定項中的另一個成員的地址?
class Foo {
Bar m_bar;
Bar * m_woo;
public:
Foo() : m_bar(42, 123), m_woo(&m_bar) { }
};
這是否符合標準?它是標準的C++分配一個成員指針的構造函數初始值設定項中的另一個成員的地址?
class Foo {
Bar m_bar;
Bar * m_woo;
public:
Foo() : m_bar(42, 123), m_woo(&m_bar) { }
};
這是正確的。什麼是不正確的是在該特定子對象被完全初始化之前取消引用該指針。
子對象按照它們聲明的順序進行初始化,而不是它們在初始化列表中出現的順序。所以即使構造函數被寫爲'Foo():m_woo(&m_bar),m_bar(42,123){}','m_bar'也會在'm_woo'之前被構造。 – 2010-05-04 17:25:47
Right @Dennis,但即使順序相反,對於給定示例,它仍然是正確的,因爲您可以初始化指向未初始化成員的指針或引用。問題是如果在初始化列表中m_woo在m_bar初始化之前被解引用。 – 2010-05-04 17:48:24
不,我明白。我澄清了如果他確實需要爲其他成員提供'm_woo'。我的直覺說初始化按照初始化列表給出的順序進行,並且這種直覺是錯誤的。 – 2010-05-04 18:16:06