Bonjour à tous,
Je suis actuellement dans la lecture d'un excellent bouquin sur la programmation de jeu, une partie traite des classes optionnelles voila un bout du code :
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
// Base :
template <unsigned long size>
class optional_base
{
public:
	optional_base();
	optional_base(const optional_base &t);
 
	optional_base & operator = (const optional_base &t);
 
	bool const Valid() const;
	bool const UnValid() const;
 
protected:
	bool m_bValid;
	char m_data[size];
};
 
// Optional :
template <class T>
class optional : public optional_base<sizeof(T)>
{
public:
 
	// Constructeurs...
	// Operateurs...
private:
 
	const T * const GetT() const	{ return reinterpret_cast<const T * const>(m_data); }
	T * const GetT()		{ return reinterpret_cast<T * const>(m_data); }
	void Construct(const T &t)	{ new (GetT()) T(t); }
	void Destroy()			{ GetT()->~T(); }
};
Seulement c'est la première fois que je vois l'opérateur new utilisé de cette manière, il n'y a de delete associé nulle part dans le code et GetT dans ce cas retourne un T*const donc les données ne sont pas sencé être modifié sauf si j'ai rien compris....... Si vous pouviez m'éclairer sur ce mystère , si il faut plus de détail sur le code n'hésitez pas à demander
Merci d'avance