gpt4 book ai didi

c++ - 为什么我可以通过原始指针而不是 shared_ptr 修改对象?

转载 作者:行者123 更新时间:2023-11-27 23:37:00 26 4
gpt4 key购买 nike

所以,我想使用一个通过 shared_ptr 修改对象的函数。

我有这个类Foo:

class Foo
{
private:
bool i = false;

public:
void activate()
{
i = true;
}

bool isActive()
{
return i;
}
};

没什么特别的。我的目标是通过指针修改 Foo 对象,如下所示:

Foo foo;

std::shared_ptr<Foo> ptrfoo = std::make_shared<Foo>(foo);
ptrfoo->activate();

// "foo.isActive" returns false here

遗憾的是,当我希望它返回 true 时,foo.isActive 返回 false。但问题是,它适用于原始指针:

Foo foo;

Foo* ptrfoo = &foo;
ptrfoo->activate();

// "foo.isActive" returns true here

那么为什么会发生这种情况,我可以通过 shared_ptr 修改对象吗?如果可以,我该怎么做?

最佳答案

智能指针是拥有指针。因为当你这样做时,他们拥有他们指向的内存

std::shared_ptr<Foo> ptrfoo = std::make_shared<Foo>(foo);

您不会获得指向 foo 的指针,而是获得指向作为 foo 拷贝的对象的指针。您对 ptrfoo 所做的任何操作都不会影响 foo。这是原始指针和智能指针之间的主要区别之一。您可以让智能指针像原始指针一样工作,但这需要大量工作,并且不拥有原始指针也可以,因此不值得尝试修改智能指针来获得该行为。

关于c++ - 为什么我可以通过原始指针而不是 shared_ptr 修改对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530596/

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