What is a safe way to accessing member variables through a shared object in C++?
In the code below, I make a shared variable and then a pointer to a member variable of it. However, the use_count remains unchanged and when I reset the shared variable the original variable is reset but not the pointer to member.
In other words, I could introduce some bugs by using b. The object it is pointing to shouldn't exist anymore.
#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; }
std::mutexstd::shared_ptr<int>(a, &a->y);