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 : 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;
}
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
 
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 : 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 ?)