指向shared_ptr的成员变量的指针

Joh*_*ohn 2 c++ shared-ptr pointer-to-member c++11

通过C++中的共享对象访问成员变量的安全方法是什么?

在下面的代码中,我创建一个共享变量,然后指向它的成员变量.但是,use_count保持不变,当我重置共享变量时,原始变量被重置但不是指向成员的指针.

换句话说,我可以通过使用b来介绍一些错误.它指向的对象不再存在.

#include <iostream>
#include <memory>

using namespace std;

struct A
{
    int y;
    A(int x)
    {
        y = x;
    }
};

int main()
{
    auto a = make_shared<A>(1);
    cout << "a count: " << a.use_count() << endl; //prints a count: 1
    auto b = a->y;
    cout << "a count: " << a.use_count() << endl; //still prints a count: 1

    a.reset();

    cout << "a value: " << a << endl; //prints a value: 0
    cout << "b value: " << b << endl; //prints b value: 1

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

auto b = a->y;
Run Code Online (Sandbox Code Playgroud)

这将复制y,因此它不是指针y,它只是一个副本.