头文件:
private:
vector<int*>* nums;
public slots:
void buttonClicked();
cpp文件:
NewWindow(){
int one = 1;
int* pone = &one;
int two = 2;
int* ptwo = &two;
vector<int*> numbers;
numbers.push_back(pone);
numbers.push_back(ptwo);
nums = &numbers;
test();
}
//Prints size of nums vector
void NewWindow::test(){
stringstream woo;
woo << nums->size()<<endl;
cout << woo.str();
}
//I just had one button on my gui
void NewWindow::buttonClicked(){
test();
}
当我运行它时,第一个测试方法在构造函数中执行,并按预期输出2。但是,在单击按钮(即执行buttonClicked()方法)之后,测试方法输出一个看似任意的数字(例如4292719658)。搞砸了一下后,我发现如果我将数字向量作为属性,test()方法每次都会输出2。为什么我得到一个奇怪的输出数字作为非属性?
答案 0 :(得分:2)
如果numbers
是一个局部变量,就像它在这里:
NewWindow(){
vector<int*> numbers;
nums = &numbers;
}
当它超出范围时,它就会被破坏,并且不再存在。在这种情况下,当NewWindow
函数返回时。引用不存在的对象(就像通过nums
指针一样)会导致未定义的行为。
另一方面,如果numbers
是一个成员变量,当它作为成员的对象被销毁时就会被销毁。