C++ 使用共享\u从该\u返回的指针访问私有成员

C++ 使用共享\u从该\u返回的指针访问私有成员,c++,memory-management,this,shared-ptr,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 = shar

我有一个如下所示的实现:

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);
    };
}
class A:public std::从\u中启用\u共享\u
{
公众:
A(){}
void dummy(std::字符串名称);
私人:
地图缓存;
};
无效的
A::dummy(std::字符串名称){
自动共享的_this=从_this()共享的_;
自动查找=
[姓名,共享此信息](){
auto iter=shared\u this->cache.find(name);
};
}
我不确定这条线是如何工作的: auto iter=shared\u this->cache.find(name)

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

这是怎么回事

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

是的,没错。由于
dummy()
a
的成员,因此它可以访问
a
的所有成员,包括私人成员

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

是的,没错。由于
dummy()
a
的成员,因此它可以访问
a
的所有成员,包括私有成员。

a::dummy(std::string name)
是类
a
的成员。因此,在该函数中,您可以访问
A
的任何实例的所有
public
protected
private
成员。以下是本标准的相关引用:

N4140§11[等级访问]/1

类的成员可以是:

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

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

(1.3)-公众;也就是说,它的名称可以在任何地方使用,而不受访问限制

N4140§11[等级访问]/2

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

A::dummy(std::string name)
是类
A
的成员。因此,在该函数中,您可以访问
A
的任何实例的所有
public
protected
private
成员。以下是本标准的相关引用:

N4140§11[等级访问]/1

类的成员可以是:

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

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

(1.3)-公众;也就是说,它的名称可以在任何地方使用,而不受访问限制

N4140§11[等级访问]/2

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


这没问题。由于
dummy()
是类
a
的成员,因此它可以访问
a
的任何实例的任何私有成员。这没有问题。由于
dummy()
是类
a
的成员,因此它可以访问
a
的任何实例的任何私有成员。