我有一个包含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
的一部分,因此在此设置中应该是不变的吗?我在这里想念什么?