Pourquoi ce code fonctionne ? (this et shared_ptr)
Bonsoir,
Je cherche en vain à essayer de récupérer un pointeur vers le this d’une classe. J’essaye avec la classe enable_shared_from_this mais cela m’oblige à créer un pointeur de l’objet que j’utilise sinon j’ai droit à une erreur. Je pense avoir une solution (voir le code ci-dessus), mais je ne comprends pas le résultat. Pourquoi, mon pointeur intelligent pointe toujours vers l’objet après que celui-ci soit détruit ?
La classe :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class MyClass
{
public:
MyClass();
~MyClass();
void Print();
const shared_ptr<MyClass> & Get_pointer();
private:
shared_ptr<MyClass> pointer;
};
MyClass::MyClass()
{
pointer = shared_ptr<MyClass>(this);
cout << "Constructor" << endl;
}
MyClass::~MyClass()
{
cout << "Destructor" << endl;
}
void MyClass::Print()
{
std::cout << "Print" << std::endl;
}
const shared_ptr<MyClass> & MyClass::Get_pointer()
{
return pointer;
} |
Le bloc d’exécution :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
std::shared_ptr<MyClass> gp1;
void Func()
{
MyClass o = MyClass();
gp1 = o.Get_pointer();
gp1->Print();
cout << gp1.use_count() << endl;
}
int main()
{
Func();
gp1->Print();
cout << gp1.use_count() << endl;
} |
La sortie console :
Code:
1 2 3 4 5 6 7
|
Constructor
Print
2
Destructor
Print (<< Comment est-ce possible ?)
1 (<< Comment est-ce possible ?) |