6
votes

Existe-t-il un amateur de suppression standard?

Je cherche un foncteur qui supprime son argument: xxx

existe quelque chose comme celui-ci dans std , tr1 ou < code> boost ?


1 commentaires

Si vous écrivez cela vous-même, BTW, puis avec struct Delete_Functor {Modèle Opérateur vide () (T * P) {Supprimer P; }}; , vous n'avez pas à spécifier T lorsque vous en créez un.


3 Réponses :


10
votes

c ++ 0x ajoutera std :: par défaut_delete à la bibliothèque standard pour prendre en charge std :: unique_ptr . .

Il a effectivement la même fonctionnalité que votre delete_functor , mais est également spécialisé pour appeler Suppr [] pour les objets de type tableau.


4 commentaires

Qu'est-ce que std :: défaut_delete () faire?


@ user1095108: Si l'opérateur () est instancié, le programme serait mal formé. Le type avec lequel par défaut_delete est instancié peut être incomplet au moment où le modèle de classe est instancié, mais il doit être complet lorsque l'opérateur () est instancié.


@Jamesmcnellis Il faut donc instancer std :: unique_ptr p {0, opérateur Supprimer}; Pour supprimer VOID * correctement?


@ user1095108: L'opérande de Supprimer peut ne pas être un vide * . Si vous essayez de Supprimer A void * , le programme est mal formé.



2
votes

1 commentaires

#include



0
votes

Nous ne sommes pas autorisés à utiliser Boost dans ma compagnie et nous n'utilisons pas non plus C ++ 11, donc j'utilise ceci: xxx

Je pense que c'est ce que vous cherchez Pour.

Vous pouvez également le recréer comme DTOR_FUN_T et remplacer "Supprimer _ PTR;" par " _ptr-> ~ _type ();" appeler seulement le DTOR. Ce serait le cas où vous avez utilisé un gestionnaire de mémoire et un placement nouveau, par exemple.


0 commentaires