Instanciation d'un en-tête "shared_ptr.h" en c++ dans la norme avant la 11
	
	
		Bonjour,
Je souhaite connaître la manière d'instancier avant la norme 11 en c++ un en-tête shared_ptr.h (ci-dessous) dans un fichier .cpp de ce type : 
	Code:
	
shared_ptr<Personne> p = new Personne(nom)
 En effet, le shared_ptr ne peut être instancié avec le makeshared de la norme 11 du c++.
	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
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 
 | #ifndef SHAREDPTR_H
#define SHAREDPTR_H
#include <assert.h>
namespace ag {
//--- classe d'exception
class ref_error {};
 
//--- modèle du pointeur partagé
template <typename T>
class shared_ptr
{
		public:
//--- opérateurs de déréférencement
		T* operator->() const throw()
		{
			assert(ptr_ref!=NULL);
			return ptr_ref->get();
		}
		T& operator*() const throw()
		{
			assert(ptr_ref!=NULL);
			return *(ptr_ref->get());
		}
//--- accès à la donnée interne
		T* get() const throw(){
			assert(ptr_ref!=NULL);
			return ptr_ref->get();
		}
//--- constructeurs / destructeur
		shared_ptr(T* p){ptr_ref=new shared_ptr_ref(p);}
		shared_ptr() throw() :ptr_ref(0){}
		shared_ptr(const shared_ptr& p) throw()
		{
			if(p.ptr_ref)
				p.ptr_ref->Prend(); // prend la responsabilité de l'objet partagé
			ptr_ref=p.ptr_ref;
		}
		~shared_ptr()
		{
			if(ptr_ref)
				ptr_ref->Libere(); // perd la responsabilité de l'objet partagé
		}
//---affectation
		shared_ptr& operator=(const shared_ptr& p)
		{
			if(ptr_ref)
				ptr_ref->Libere(); // perd une responsabilité sur l'ancien objet
			if(p.ptr_ref)
				p.ptr_ref->Prend();// prend une responsabilité sur un nouvel objet
			ptr_ref=p.ptr_ref;
			return *this;
		}
		shared_ptr& operator=(T* ptr)
		{
			if(ptr_ref) ptr_ref->Libere();
			ptr_ref = new shared_ptr_ref(ptr);
			return *this;
		}
 
 
//--- comparaisons
		bool operator==(T* ptr) const
		{
			bool ok=false;
			if(ptr_ref==0)
				ok =(ptr==0);
			else
				ok = (ptr_ref->get()==ptr);
			return ok;
		}
		bool operator!=(T* ptr) const {return !operator==(ptr);}
		operator bool() const
        {
            return (ptr_ref!=0 && ptr_ref->get()!=0);
        }
 
		private:
//--- classe assistante représentant l'objet partagé
		class shared_ptr_ref
		{
				T* ptr; // la donnée interne
				mutable int count; // le comptage de références : mutable car amené à changer même sur un shared_ptr_ref const.
	// on interdit la copie et l'affectation
				shared_ptr_ref(const shared_ptr_ref&);
				void operator=(const shared_ptr_ref&);
 
				public:
	// constructeurs / destructeur
				explicit shared_ptr_ref(T* p) throw() :ptr(p),count(1){}
				~shared_ptr_ref(){delete ptr;}
	// gestion des références
				void Prend() const throw() {++count;}
				void Libere(){--count; if(count==0) delete this;}
	// accès à la donnée interne
				T* get() const throw(){return ptr;}
		};
		mutable shared_ptr_ref* ptr_ref; // référence partagée
};
 
 
} // fin du namespace
#endif | 
 Cette étude me permettra de comprendre de manière basique le fonctionnement des pointeurs intelligents.
D'avance merci