gpt4 book ai didi

c++ - 使用智能指针指向const int的指针

转载 作者:行者123 更新时间:2023-12-01 15:12:25 24 4
gpt4 key购买 nike

我正在尝试创建一个智能指针(unique_ptr)来返回以const int&返回的值,但是我的问题可以很容易地归纳为:

 const int value = 5;
const int * ptr{nullptr};
ptr = &value;
这可以正常工作,并且可以按预期进行编译。使用智能指针尝试相同操作时:
 const int value = 5;
std::unique_ptr<const int> ptr{nullptr};
ptr = &value;
有了这个我得到编译错误:
no operator "=" matches these operands -- operand types are: std::unique_ptr<const int, std::default_delete<const int>> = const int *
是否有可能获得与普通C指针相同的行为?
编辑:
我看到我原来的问题太简单了:这是更高级的版本:
int value = 5;
const int& getValue(){
return value;
};
std::unique_ptr<const int> ptr1{nullptr};
const int * ptr2{nullptr};

ptr1 = std::make_unique<const int>(getValue());
ptr2 = &getValue();
std::cout << "ptr1: " << *ptr1 << "\n";
std::cout << "ptr2: " << *ptr2 << "\n";
value++;
std::cout << "ptr1: " << *ptr1 << "\n";
std::cout << "ptr2: " << *ptr2 << "\n";
打印输出:
ptr1: 5
ptr2: 5

ptr1: 5
ptr2: 6
如您所见,行为有些不同,现在我相信是因为 make_unique在指向的内存地址中复制了值

最佳答案

std::unique_ptr不能直接由原始指针分配;您可以使用 reset 。但是,您不应该分配value的地址(该地址在自动退出范围时会被破坏),std::unique_ptr会尝试对指针进行delete,从而导致UB。
你可能想要

int value = 5; // we'll constructor a new object, value doens't need to be const
std::unique_ptr<const int> ptr{nullptr};
ptr = std::make_unique<const int>(value); // construct a new object and pass the ownership to ptr
编辑
为了使用 smart pointers

Smart pointers are used to make sure that an object is deleted if it is no longer used (referenced).


如果您不希望智能指针管理对象,或者不能让智能指针拥有该对象,则不应使用智能指针。对于这种特殊情况,我认为使用原始指针就可以了。

关于c++ - 使用智能指针指向const int的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63412215/

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