This question already has answers here:
Passing pointer of dynamic var by reference
(2个答案)
5年前关闭。
抱歉,但是我认为我现在已经了解了堆栈和堆,但是显然我错了。我声明了堆上的每个对象,但是当第一个方法完成时,所有对象都一样,我可以通过std :: cout看到时间为零,即:
当时间在函数中打印时,可以,但是在函数结束后,它以某种方式被销毁。
我错过了重要的事情吗?我应该从函数返回指针吗?
提前致谢!!!
(2个答案)
5年前关闭。
抱歉,但是我认为我现在已经了解了堆栈和堆,但是显然我错了。我声明了堆上的每个对象,但是当第一个方法完成时,所有对象都一样,我可以通过std :: cout看到时间为零,即:
startTPtr: 00:00:00
当时间在函数中打印时,可以,但是在函数结束后,它以某种方式被销毁。
我错过了重要的事情吗?我应该从函数返回指针吗?
提前致谢!!!
int main() {
Clock *_clockPtr = new Clock();
MyTime *_startTPtr = new MyTime();
MyTime *_endTPtr = new MyTime();
char *ch = new char[100];
start_app(_startTPtr, _endTPtr, _clockPtr, ch);
cout << "startTPtr: " << *_startTPtr << endl;
return 0;
}
void start_app(MyTime *_startTPtr, MyTime *_endTPtr, Clock *clock, char *ch) {
cout << "Press ENTER to start and finish!";
int newLine = 0;
for (std::string line; std::getline(std::cin, line); ) {
if (newLine == 0) {
std::cout << "... ";
MyTime* myTime1 = new MyTime(clock->give_me_the_time());
_startTPtr = myTime1;
cin >> ch;
} else {
MyTime* myTime2 = new MyTime(clock->give_me_the_time());
_endTPtr = myTime2;
break;
}
cout << "startTPtr: " << *_startTPtr << endl;
newLine++;
}
}
最佳答案
如果要更改函数中的参数并将其反映在函数的调用者中,则需要通过引用传递参数。否则,将复制参数,并且您仅更改副本。
在start_app
函数中,您想同时更改_startTPtr
和_endTPtr
,因此您需要将它们作为对MyTime
指针的引用进行传递:
void start_app(MyTime *&_startTPtr, MyTime *&_endTPtr, Clock *clock, char *ch) { ... }
关于c++ - 尽管在堆上分配,但值仍然被破坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23516253/
10-11 21:06