gpt4 book ai didi

传递给函数时的 C++ 指针问题

转载 作者:行者123 更新时间:2023-11-28 00:14:38 27 4
gpt4 key购买 nike

下面的解决方案 近一年来,我以为我完全理解了指针,但现在它失败了。如果需要,我会发布整个文件。

// Test Structure and Function
struct You {
int x;
int y;
string str;
};

bool Show(You* showValue);


// Should (delete) in whatever way possible and update its address to the "You* update" you sent
void Update(You* update, int n) {

// Create a new "You"
You* youTwo = new You();
youTwo->x = 55;
youTwo->y = 43;
youTwo->str = "Twin";

// Update?
update = youTwo;

return;
};




bool Show(You* showValue) {
cout << "Show:" << endl;
cout << showValue->x << '\t';
cout << showValue->y << '\t';
cout << showValue->str << '\t';
cout << endl << endl;
};



int main(int argc, char** argv) {

// Original You
You* currentYou = new You();
currentYou->x = 1;
currentYou->y = 2;
currentYou->str = "You";

// Update the current you to a new you
Show(currentYou); // works
Update(currentYou, 5); // no compile errors
Show(currentYou); // shows initial values instead of the updated

return 0;
};

Update 函数是问题所在。我的意图是删除(或摆脱)原来的。用 new You() 替换它并完成它。

最佳答案

您将指针传递给 You按值到 void Update(You*,int) .因此 update = youTwo;这对 currentYou 没有影响.

更改 Updatevoid Update(You*& update, in n) { //...并阅读引用资料。

顺便说一句,你有内存泄漏。你更新了指针,但你永远不会释放旧的 currentYou也不是新的 currentYou .你应该使用“智能指针”(显式 shared_ptr<You> )来清理你身后的一切,而不必调用 delete每次你自己。

关于传递给函数时的 C++ 指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31150909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com