Bonjour,

Dans le code ci-dessous :

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
33
34
35
36
 
using fun = std::function<void(int)>;
 
class Class_
{
public:
	Class_()
	{
		std::cout << "ctor" << std::endl;
	}
	~Class_()
	{
		std::cout << "dtor" << std::endl;
	}
	void operator()(int x_)
	{
		std::cout << "x " << x_ << std::endl;
	}
};
 
void show(const fun& f_)
{
	f_(1);
}
 
void test_function2()
{
	fun fff;
 
	{
		Class_ ccc;
		fff = ccc;
	}
 
	show(fff);
}
... j'appelle la fonction test_function2() et voila l'affichage :

ctor
dtor
dtor
x 1
dtor
Mes questions :
1 - Ce code est-il correct ? j'ai voulu testé std::function en limitant la portée de l'instance ccc, je ne pensais pas que ça pourrait fonctionner...
2 - pourquoi le destructeur est appelé 3 fois ?