我遇到了一個令我感到困惑的問題。這與我是選擇存儲對象還是指向它的指針有關。字符串在構造函數中被賦值,但之後變爲空白C++
這是我的課:
class Test {
public:
std::string abc;
int x;
Test(std::string def, int y) {
abc = def;
cout << abc << endl; //THIS ALWAYS GIVES "ghi"
x = y;
}
};
把它作爲一個指針:
Test* T1 = &Test{ "ghi", 100 };
cout << T1->abc << endl; //**THIS IS BLANK -- WHY!?**
cout << T1->x << endl; //THIS GIVES 100
把它作爲一個對象本身:
Test T2 = Test{ "ghi", 100 };
cout << T2.abc << endl; //THIS GIVES "ghi"
cout << T2.x << endl; //THIS GIVES 100
我是比較新的C++但基於我的理解,T1-> abc應該取消引用指針T1(因此我有一個Test對象),然後訪問m對該Test對象的abc進行ember。由於我已經創建了該對象,因此應該是「ghi」。但是,這是空白的。
顯然,這隻適用於字符串成員,而不是整數成員,因爲T1-> x正常工作。
當我存儲對象而不是指向它的對象時,問題不存在,如對象T2所示。
我檢查過在T1和T2施工期間,abc總是「ghi」裏面的的構造函數。不知何故,建設後,字符串就消失了。
此外,根據我讀到的,abc = def複製字符串內容而不是指針,所以它可能不是範圍問題。
https://msdn.microsoft.com/en-us/library/b930c881.aspx非常清楚,在任何情況下,是否 - >或。被使用,可以進行分配。
搜索谷歌和stackoverflow沒有幫助。因此你的讚賞。提前致謝。
class Test {
public:
std::string abc;
int x;
Test(std::string def, int y) {
abc = def;
x = y;
}
};
int main() {
Test* T1 = &Test{ "ghi", 100 };
cout << T1->abc << endl; //THIS IS BLANK -- WHY!?
cout << T1->x << endl; //THIS GIVES 100
Test T2 = Test{ "ghi", 100 };
cout << T2.abc << endl; //THIS GIVES "ghi"
cout << T2.x << endl; //THIS GIVES 100
return 0;
}
'Test * T1 =&Test {「ghi」,100};'這是錯誤的。不要這樣做。您將該指針重新設置爲臨時對象的地址(在該行的分號後不會存在)。 – Borgleader
據我所知,g ++甚至不會讓你編寫這樣的代碼。 –
在我的實際問題中,我有一個抽象基類,稱之爲測試。我也有一些派生類,但是我選擇實例化的派生類只能在運行時確定。因此,我正在使用指向Test的指針來保存派生類的指針。因此我需要一個指針。有一個更好的方法嗎? – emoPuppy