salut !
J'ai suivi vos indications et essaye de me mettre aux smart_pointers.
Ca a l'air efficace... mais je ne peux les tester !
J'ai donc developpé la classe suivante (pour m'entrainer) :
le cpp :
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 #include "stdafx.h" #ifndef __SMART_PTR_CLASS__ #define __SMART_PTR_CLASS__ template< class T > class PTR { private: T* m_Ptr; public: explicit PTR(T* Value); virtual ~PTR(); void Show(); T* operator ->() { return m_Ptr; } T& operator *() { return *m_Ptr; } }; #endif
ca compile trés bien.
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 template< class T > PTR<T>::PTR(T* Value):m_Ptr(NULL) { if( Value ) m_Ptr = Value; } template< class T > PTR<T>::~PTR() { if( m_Ptr ) delete m_Ptr; } template< class T > void PTR<T>::Show() { if( m_Ptr ) cout << m_Ptr << endl; }
Cependant, dans le fichier main, si je met n'importe quoi en relation avec ma classe, j'obtient des erreurs linker !!!
De plus, dans l'arborescence de VC++ pour les classes : si je dbl-clk sur la methode Show, ile me dit qu'il ne peut m'y emmener puisque la methode n'est pas implémentée !
voici mon code sdans 'main"
il me jette a la figure les erreur suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include "stdafx.h" #include "smart_ptr.h" int main(int argc, char* argv[]) { PTR<int> p = PTR<int>(new int); return 0; }
Et question subsidiaire : je construie mon objet. Mais si par defaut je veux lui donner la valeur "n",commet je dois faire, puisque la je dit dans le Ctor "new int" ??Envoyé par VC++
merci
Partager