lundi 24 mai 2021

Lifetime of object pointed to by shared pointer

Take the following example

struct A {
   int x = 0;
};

struct B {
   std::shared_ptr<A> mA;
   
   void setA(std::shared_ptr<A> a) {
     mA = a;
   }
};

struct C {

  B initB() {
    A a;
    
    A *aPtr = &a;
    B b;
    b.setA(std::make_shared<A>(aPtr));
    return b;
 } 
};

Now in main() method

C c;
B b = c.initB();

Local variable a in initB() goes out of scope one function finishes executing. However there is a shared pointer pointing to it. Will the object the shared pointer points get deleted when a goes out of scope? Finally will *(b.mA) give a valid instance of A?

Aucun commentaire:

Enregistrer un commentaire