我有一个类,在那里我有一个包含字符串的结构。在main中我声明了类,然后创建一个结构来到达该字符串。 看起来如何:
Class *myClass = new Class;
Class::Struct *myStruct;
myStruct = &myClass->getStruct(); // the struct is in a vector so I get it through a function
cout << myStruct->string << "\n";
所以,使用这个方法我无法访问结构中的字符串,但我可以使用int,float等。 如果我将代码更改为:
Class::Struct myStruct;
myStruct = myClass->getStruct();
cout << myStruct.string << "\n";
然后它有效。
我的问题是,为什么第二个工作,第一个不工作,为什么只有字符串? 这不是关于生与死,因为我不需要那个字符串,我只是测试了程序,但我真的很好奇发生了什么,因为我还在学习语言,尤其是指针。
提前致谢!
编辑: 好的,所以定义
class Class {
public:
struct Struct {
string name;
float data;
};
Class();
Struct getStruct( int i );
private:
vector<Struct> tempStruct;
};
Class::Class() {
Struct str;
str.name = "test";
str.data = 1.0f;
tempStruct.push_back( str );
}
struct Class::getStruct( int i ) {
return tempStruct[i];
}
EDIT2: 这是一个小错误,但我忘了&amp;。但是你帮我找到了它。
答案 0 :(得分:1)
这是因为getStruct()
返回结构的副本。这被称为“临时”。临时死亡。所以现在你有一个指向死时的指针。它不再存在,因此指向它的指针无效。在getStruct()
中返回指向结构的指针或引用,或者像这样保持对其返回值的引用:
const Class::Struct& myStruct = myClass->getStruct();