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:
	
| 12
 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:
	
| 12
 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:
	
| 12
 3
 4
 5
 6
 7
 
 |  
Constructor
Print
2
Destructor
Print (<< Comment est-ce possible ?)
1      (<< Comment est-ce possible ?) |