C++ C++;通过类指向字符串的指针
我有一个类,其中有一个包含字符串的结构。我主要声明该类,然后创建一个结构来访问该字符串。 它看起来是什么样子:C++ C++;通过类指向字符串的指针,c++,string,pointers,C++,String,Pointers,我有一个类,其中有一个包含字符串的结构。我主要声明该类,然后创建一个结构来访问该字符串。 它看起来是什么样子: 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 <
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";
Class*myClass=新类;
Class::Struct*myStruct;
myStruct=&myClass->getStruct();//结构在向量中,所以我通过函数得到它
cout string这是因为getStruct()
返回结构的副本。这被称为“临时”。临时工立即死亡。现在你有了一个指向一个死临时变量的指针。它不再存在,因此指向它的指针无效。在getStruct()
中返回指向结构的指针或引用,或者像这样保留对其返回值的引用:
const Class::Struct& myStruct = myClass->getStruct();
显示类和结构定义。信息如此之少很难猜测。几乎可以肯定的是,getStruct()
从向量返回结构的副本,这意味着在第一种情况下,myStruct
具有临时对象的地址,导致myStruct
成为悬空指针。函数应该返回引用,而不是副本(或(通常)指针)@Zharf好吧,我们不知道它应该返回什么,因为我们看不到类的代码。不过,为了更完整,我将它添加到了答案中。但正如我之前所写的,问题只在于字符串。我可以写出浮点数的值,但不能写出字符串的值。这是我无法理解的。@matthew3r Thi是因为内存中仍然包含数据的残余。换句话说,您正在访问尸体。但在编程中,尸体会很快腐烂。@matthew3r这是技术上未定义的行为,不要指望它
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];
}
const Class::Struct& myStruct = myClass->getStruct();