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();