返回成员变量时,为什么在函数内外得到不同的结果?

When returning a member variable, why do I get different results inside and outside a function?

当我尝试打印函数内的成员变量时,它给出了我想要的结果。但是,如果我 return 这个成员变量然后尝试在 main 中访问它,它会给我一个不同的结果。为什么会这样?

我的代码如下所示:

Node.h:

#include <cstddef>
#include <vector>
#include <iostream>

using namespace std;

class Node{
 public:
    int v;
    Node * parent;
    Node(int I);
    Node(int I,Node * p);
    vector<Node*> myfun();
}

Node.cpp:

Node::Node(int I){
    v = I;
    parent = NULL;
}

Node::Node(int I,Node * p){
    v = I;
    parent = p;
}

vector<Node*> Node::myfun(){
    vector<Node*> myvec;

    Node next1(1,this);
    myvec.push_back(&next1);

    Node next2(2,this);
    myvec.push_back(&next2);

    cout << myvec[0]->v << endl; // prints out "1"
    cout << myvec[1]->v << endl; // prints out "2"

    return(myvec);
}

main.cpp:

#include "Node.h"

int main(){
    vector<Node*> myvec;
    Node init(0);
    myvec = init.myfun();

    cout << myvec[0]->v << endl; // prints out garbage
    cout << myvec[1]->v << endl; // prints out garbage

    return 0;
}

因为在您的 Node::myfun() 中,您的 next1next2 变量在方法结束时都被销毁(它们不再存在)。因此,您将返回指向不再存在的对象的指针。这样的指针被称为悬挂指针,取消引用悬挂指针是未定义的行为。