gpt4 book ai didi

c++ - 如何更改以避免复制指针的内容

转载 作者:行者123 更新时间:2023-11-30 03:53:05 25 4
gpt4 key购买 nike

编辑 3

我有以下代码

std::shared_ptr<int> original = std::make_shared<int>(5);
std::shared_ptr<int> other = std::make_shared<int>(6);
std::stack<std::shared_ptr<int>> todo;
todo.push(original);
std::shared_ptr<int> temp = todo.top();
*temp = *other;

std::cout << original << other << temp << std::endl;

original 现在指向资源 6,然后控制台中的输出为 666。我喜欢避免复制 *temp = *other,因为我在指针和堆栈中使用的实际值复制起来很昂贵。

最佳答案

您只需要继续使用指向指针的指针即可。

//we need to make shared pointer to shared pointer
const std::shared_ptr<std::shared_ptr<int>> orginal =
std::make_shared<std::shared_ptr<int>>(std::make_shared<int>(5));
// const pp1 must be declarated before p1 to make sure p1 is valid
std::shared_ptr<int> &p1 = *orginal;
std::shared_ptr<int> p2 = std::make_shared<int>(6);
cout << *p1 << *p2 << endl;
std::stack<std::shared_ptr<std::shared_ptr<int>>> todo;
//we cannot add p1, instead we need to add orginal
todo.push(orginal);
std::shared_ptr<std::shared_ptr<int>> temp = todo.top();
//this does change the orginal
*temp = p2;
cout << *p1 << *p2 << endl;

不,你不能那样改变 p2,它位于堆栈上,将指向堆栈的指针保留在 shared_ptr 中是非常不可理解的。

无论如何,我认为您可能正在寻找享元模式,see this .

关于c++ - 如何更改以避免复制指针的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30313036/

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