我在C++兩個構造,以及一個構造函數調用,以便不重複初始化邏輯的另一個。有趣的是A()調用A(int),但是這個指針指向不同的地址。有趣的是A()調用A(int),但是這個指針指向不同的地址。爲什麼是這樣?還是這個g ++的bug?不同存儲器地址
int main(int argc, char *argv[]) {
A* a = new A();
}
0x7fa8dbc009d0 <-- from A()
0x7fff67d660d0 <-- from A(int)
我在C++兩個構造,以及一個構造函數調用,以便不重複初始化邏輯的另一個。有趣的是A()調用A(int),但是這個指針指向不同的地址。有趣的是A()調用A(int),但是這個指針指向不同的地址。爲什麼是這樣?還是這個g ++的bug?不同存儲器地址
int main(int argc, char *argv[]) {
A* a = new A();
}
0x7fa8dbc009d0 <-- from A()
0x7fff67d660d0 <-- from A(int)
我相信A(20);
正在建設的是構造函數內的一個不同的實例,而不是調用同一實例的其他構造。如何從構造函數中調用另一個構造函數,請參閱Can I call a constructor from another constructor (do constructor chaining) in C++?。
如果您使用的是支持C++ 11編譯器,我想你可以實現你想要的這個定義A()
構造:
A(): A(20)
{
cout << this << endl;
}
A(20);
是它構建的新實例聲明A
,不A
的上this
構造函數的調用。
不能調用C++ 03的給定構造內的另一個構造函數重載。但是,您可以使用展示位置新功能來獲得相同的效果。替換:
A(20);
在你的代碼:
new (this) A(20);