2010-09-01 12 views
2

J'ai un boost::shared_ptr avec un suppresseur personnalisé attaché. Lors de la conversion à weak_ptr est l'information de deleter perdu? Si oui, comment rattacher le même suppresseur à shared_ptr -s acquis de la méthode weak_ptr::lock()?boost :: interaction weak_ptr avec un suppresseur personnalisé

La fonctionnalité que j'implémente est un conteneur de weak_ptr -s pointant vers les instances actives d'un certain type. J'ai besoin du suppresseur personnalisé pour supprimer l'entrée de conteneur pour les objets en cours supprimés.

Répondre

2

Non, le suppresseur personnalisé n'est jamais perdu.

Lorsque vous lock() votre weak_ptr vous regagnez un shared_ptr avec le même Deleter personnalisé (et d'autres attributs) que celui que vous utilisez pour créer le weak_ptr à partir en premier lieu.

Toutefois, si aucune shared_ptr références votre weak_ptr plus longtemps, le lock() échouera et retournera une valeur nulle shared_ptr. En d'autres termes, vous ne devriez pas avoir à vous soucier du suppresseur personnalisé. Si vous l'avez spécifié lors de la création shared_ptr, il sera appelé lorsque le dernier shared_ptr associé sera libéré.