C ++指向字符串的指针

时间:2012-10-26 14:00:58

标签: c++ string pointers

我有一个类,在那里我有一个包含字符串的结构。在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;。但是你帮我找到了它。

1 个答案:

答案 0 :(得分:1)

这是因为getStruct()返回结构的副本。这被称为“临时”。临时死亡。所以现在你有一个指向死时的指针。它不再存在,因此指向它的指针无效。在getStruct()中返回指向结构的指针或引用,或者像这样保持对其返回值的引用:

const Class::Struct& myStruct = myClass->getStruct();