为什么对const共享指针的引用允许使用计数更改?

时间:2019-02-05 15:06:57

标签: c++ reference const shared-ptr

我有一个包含std::shared_ptr私有成员并具有公共getter方法的类,该方法对该成员返回对const的引用,并声明为const(请参见代码)下面)。

现在,我希望如果调用这样的getter方法,则无法像下面的代码那样使用返回的引用来“生成”新的指针。这将需要增加shared_ptr的引用计数(这会按预期发生),但据我所知,这与所有const的限制相抵触,因为我通过引用到{由const声明的方法返回的{1}}。

const

这将编译并运行而不会出现问题(#include <iostream> #include <memory> #include <vector> class Foo { public: Foo() : foo_{std::make_shared<int>(0)} { std::cout << foo_ << std::endl; std::cout << foo_.use_count() << std::endl; } std::shared_ptr<int const> const & foo() const { return foo_; } private: std::shared_ptr<int const> foo_; }; int main() { Foo bar; std::vector<std::shared_ptr<int const>> v{bar.foo()}; std::cout << v.at(0) << std::endl; std::cout << v.at(0).use_count() << std::endl; return 0; } ):

gcc 8.2.0

但是,如上所述,我期望编译错误。因此,显然0x5b7dc90 1 0x5b7dc90 2 的{​​{1}}不受use_count的影响。但为什么?使用计数不是shared_ptr的一部分,因此在此设置中应该是不变的吗?我在这里想念什么?

0 个答案:

没有答案