使用shared_from_this返回的指针访问私有成员

时间:2017-01-19 23:29:03

标签: c++ memory-management this shared-ptr

我有一个看起来像这样的实现:

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);

看起来我们正在尝试使用指向该类的指针来访问私有成员,但我不确定它是否以不同的方式工作。

这是如何运作的?

2 个答案:

答案 0 :(得分:2)

A::dummy(std::string name)是班级A的成员。因此,在此功能中,您可以访问public的任何实例的所有protectedprivateA成员。以下是标准的相关引用:

  

N4140§11[class.access] / 1

     

班级成员可以是:

     

(1.1) - 私人;也就是说,其名称只能由成员以及声明它的类的朋友使用。

     

(1.2) - 受保护;也就是说,它的名称只能由其所在类的成员和朋友使用   通过从该类派生的类和他们的朋友声明(见11.4)。

     

(1.3) - 公开;也就是说,它的名称可以在没有访问限制的任何地方使用。

     

N4140§11[class.access] / 2

     

类的成员也可以访问该类有权访问的所有名称。成员函数的本地类可以访问成员函数本身可以访问的相同名称。

答案 1 :(得分:0)

  

看起来我们正在尝试使用指向该类的指针来访问私有成员,但我不确定它是否以不同的方式工作。

是的,这是正确的。由于dummy()A的成员,因此它可以访问A的所有成员,包括私有成员。