Prohiber l'allocation/destruction d'objet

Prohiber l'allocation/destruction d'objet - C++ - Programmation

Marsh Posté le 03-12-2004 à 10:37:35    

J'ai divers classe dont les instances sont allouable par le client et sont accaparé par un gestionnaire.
 

Code :
  1. Task* task = new Task( /*...*/ );
  2. TaskManager mng;
  3. mng.registerTask( task, TASK_ID );


 
Le pb est que je veut empecher la destruction des Task par le client mais la laissé gérée par le TaskManager.
 
Como estas possibla ?

Reply

Marsh Posté le 03-12-2004 à 10:37:35   

Reply

Marsh Posté le 03-12-2004 à 11:04:13    

Je sais pas si c'est possible , j'ai jamais testé mais essaye de mettre le destructeur en protected et rajoute  
 
friend class Task;
 
dans la declaration de TaskManager

Reply

Marsh Posté le 03-12-2004 à 11:06:36    

spokup a écrit :

Je sais pas si c'est possible , j'ai jamais testé mais essaye de mettre le destructeur en protected et rajoute  
 
friend class Task;
 
dans la declaration de TaskManager


 
L'inverse plutôt. ;)  friend class TaskManager dans la classe Task.
 

Reply

Marsh Posté le 03-12-2004 à 11:12:49    

Pointeur intelligent ?
Fonction membre (qui peut être template) dans ton TaskManager qui en un seul coup fait la création & l'association avec un ID ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-12-2004 à 11:16:55    

Lam's a écrit :

L'inverse plutôt. ;)  friend class TaskManager dans la classe Task.


 
oui exact !

Reply

Marsh Posté le 03-12-2004 à 11:27:14    

c'est parfait merci \o/

Reply

Marsh Posté le 03-12-2004 à 11:32:24    

D'un point de vue de conception, Puis-je te suggérer de déléguer la creation des objets au manager ? C'est une bonne habitude de faire en sorte que la création/suppression se fasse par la même classe.
 
Et ça t'évitera de faire le register à la main (les utilisateurs sont toujours très tête en l'air...).
 
Task* task = TaskManager::CreateTask( /*...*/ );
 
 
edit: j'avais zappé le message de HelloWorld. grilled donc.


Message édité par Lam's le 03-12-2004 à 11:35:37
Reply

Marsh Posté le 03-12-2004 à 14:54:22    

c'est le cas deja mais je voulais prevenir le fait que l'utilisateur qui recoit un Task* du manager le detruise ;)

Reply

Marsh Posté le 03-12-2004 à 15:10:13    

Renvoie un pointeur intelligent type shared_ptr...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 03-12-2004 à 15:26:31    

:o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed