gpt4 book ai didi

c++ - 唯一指针与原始指针

转载 作者:行者123 更新时间:2023-11-30 00:43:29 24 4
gpt4 key购买 nike

尝试了解 unique_pointer 与原始指针访问

#include <iostream>
#include <memory>

int main() {
int a = 10;
int *x = &a;
int *y = &a;
std::unique_ptr<int> p1 = std::make_unique<int>(a);
std::cout<<*x<<*p1<<*y<<"\n";
// prints 101010
*p1 = 20;
std::cout<<*x<<*p1<<*y<<"\n";
// prints 102010
*x =30;
std::cout<<*x<<*p1<<*y<<"\n";
// 302030
return 0;
}

输出

101010
102010
302030

Program ended with exit code: 0

上面代码中x,y,p1都是指向变量a;所以值 a 的变化应该反射(reflect)到所有取消引用的指针。

请帮助我理解我是那些现在从使用原始指针转向使用智能指针的人中的少数人的行为。

最佳答案

你错了,p1不指向 a .

改为std::make_unique<int>(a)打造全新int对象并将其初始化为 a 的当前 .


制作p1指向 a你需要做的

std::unique_ptr<int> p1(&a);

然而,这会带来其他问题,例如 p1接管 &a所有权 ,并在 p1 时尝试释放该内存被破坏(这是不可能的)。

你可以使用 the Boost null_deleter 避免最后一个问题。

但我建议在大多数情况下你不应该把智能指针看成是简单的自删除指针,而应该从所有权的角度来看。

关于c++ - 唯一指针与原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53977252/

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