Question

Je veux simplement une classe qui fait cela:

class cleanup : boost::noncopyable
{
 public:
  typedef boost::function0<void> function;
  explicit cleanup( function f ) : func( f )
  {
  }

  ~cleanup()
  {
    func();
  }
  private:
    function func; 
};

Le but étant que j'ai ce « nettoyage » pour invoquer func lorsqu'il est supprimé. le nettoyage sera passé autour comme shared_ptr.

Je l'ai envisagé de le faire également à l'aide d'un Deleter personnalisé dans boost :: shared_ptr. Peut-être que je pourrais utiliser boost :: shared_ptr et juste créer avec NULL et obtenir func () pour prendre un paramètre que l'on ne tient pas compte.

Le but de tout cela est de faire abstraction d'une étape que je veux le destructeur de la classe à réaliser lorsque la dernière référence est hors de portée (en fait se retirer du conteneur qui contient sans la classe d'avoir à connaître son récipient).

Si je le fais avec shared_ptr je peut passer autour d'un de ces derniers:

boost::shared_ptr<void> cleanupObj( NULL, func );

Ici, le func doit prendre un paramètre. Je ne suis pas sûr à 100% même que le Deleter sera toujours appelée en cas le pointeur NULL est alors peut-être que je dois utiliser un autre pointeur qui en fait commencer à obtenir « désordre » à la recherche.

Yat-il un moyen standard pour gérer cela et sinon quelle est la meilleure façon?

Était-ce utile?

La solution

Je crois qu'il ya une bibliothèque de sortie de PÉRIMÈTRE Boost. Cependant, pourquoi ne pas simplement utiliser le code que vous avez écrit dans l'OP? Et, en général, si vous avez une classe dans un récipient, faire la vaisselle propriétaire du conteneur sur les références et gérer ce qui se passe quand il ne reste maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top