gpt4 book ai didi

c++ - 返回智能指针并为其赋值不起作用

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

我在修改类函数返回的智能指针的内容时遇到了一些问题。返回对指针的引用是一种解决方案,但我担心这是一种不好的做法。

这是我的代码:

#include <memory>
#include <iostream>

class Foo
{
public:
Foo() : ptr_(new int(5)) {};
~Foo() {};

std::shared_ptr<int> bar()
{
return ptr_;
}

void print()
{
std::cout << *ptr_ << std::endl;
}

private:
std::shared_ptr<int> ptr_;
};

int main()
{
Foo f;
f.print();

// First case
f.bar() = std::make_shared<int>(23);
f.print();

// Second case
f.bar().reset(new int(23));
f.print();

// Third case
*f.bar() = 23;
f.print();

return 0;
}

这是输出:

5
5
5
23

为什么只有在第三种情况下 ptr_ 才改变它的值?

最佳答案

bar() 返回 shared_ptr 的拷贝。
因此,分配给该拷贝不会更改原始 shared_ptr

要使其按预期工作,您应该返回对内部指针的引用:

std::shared_ptr<int>& bar()
{
return ptr_;
}

关于c++ - 返回智能指针并为其赋值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279434/

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