所以,我想使用一个通过 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/