我遇到了一个令我感到困惑的问题。这与我是选择存储对象还是指向它的指针有关。字符串在构造函数中被赋值,但之后变为空白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