我的問題是: 當我將std::shared_ptr
引入到B類中時,它會給其他數據成員進行零初始化。C++ std :: shared_ptr會初始化類中的其他成員數據
的代碼如下給出:
class A
{
public:
int data_a;
A():data_a(0){}
};
class B
{
public:
int data_b;
A a;
//shared_ptr<B> ptr_b; // the key point here
};
int main()
{
B b;
cout << b.data_b << endl;
}
}
作爲構件a
具有所以B將生成的隱式默認構造函數默認的構造函數。
現在我沒有出臺shared_ptr
所以輸出會是:
-858993460
但是,一旦我介紹了share_ptr
入代碼,輸出成爲:
0
爲什麼?是什麼讓這發生?
在此先感謝。
我使用微軟共混物VS社區2015年版14.025425.01更新3.
訪問'b.data_b'表現出未定義的行爲。 [任何結果](http://www.catb.org/jargon/html/N/nasal-demons.html)都是有效的。 –
謝謝。我知道這一點。但是我想知道當我將shared_ptr'prt_b'引入類B時,是什麼使它產生一個零初始化?你看,當我做出這樣的改變時,結果爲0。 –
您的代碼有一個錯誤。修復這個錯誤,這個謎將消失。如果你的問題是「爲什麼有錯誤的代碼會做一些奇怪的事情」,那是因爲這就是錯誤的本質。 –