我有一个看起来像这样的实现:
class A : public std::enable_shared_from_this<A>
{
public:
A() {}
void dummy(std::string name);
private:
std::map<std::string, std::string> cache;
};
void
A::dummy(std::string name) {
auto shared_this = shared_from_this();
auto find =
[name, shared_this] () {
auto iter = shared_this->cache.find(name);
};
}
我不确定这条线是如何工作的: auto iter = shared_this-&gt; cache.find(name);
看起来我们正在尝试使用指向该类的指针来访问私有成员,但我不确定它是否以不同的方式工作。
这是如何运作的?
答案 0 :(得分:2)
A::dummy(std::string name)
是班级A
的成员。因此,在此功能中,您可以访问public
的任何实例的所有protected
,private
和A
成员。以下是标准的相关引用:
N4140§11[class.access] / 1
班级成员可以是:
(1.1) - 私人;也就是说,其名称只能由成员以及声明它的类的朋友使用。
(1.2) - 受保护;也就是说,它的名称只能由其所在类的成员和朋友使用 通过从该类派生的类和他们的朋友声明(见11.4)。
(1.3) - 公开;也就是说,它的名称可以在没有访问限制的任何地方使用。
N4140§11[class.access] / 2
类的成员也可以访问该类有权访问的所有名称。成员函数的本地类可以访问成员函数本身可以访问的相同名称。
答案 1 :(得分:0)
看起来我们正在尝试使用指向该类的指针来访问私有成员,但我不确定它是否以不同的方式工作。
是的,这是正确的。由于dummy()
是A
的成员,因此它可以访问A
的所有成员,包括私有成员。