0

我有一个类,在那里我有一个包含字符串的结构。在 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: 这是一个小错误,但我忘记了 &。但是你帮我找到了。

4

1 回答 1

1

这是因为getStruct()返回结构的副本。这被称为“临时”。临时工立即死亡。所以现在你有一个指向死临时的指针。它不再存在,因此指向它的指针无效。要么返回一个指针或对 in 结构getStruct()的引用,要么持有对其返回值的引用,如下所示:

const Class::Struct& myStruct = myClass->getStruct();
于 2012-10-26T14:06:12.803 回答