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 :
Le bloc d’exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
La sortie console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Constructor Print 2 Destructor Print (<< Comment est-ce possible ?) 1 (<< Comment est-ce possible ?)
Partager