/* maclasse.hh */#include<memory>#include"une_lib_en_c.h"classMaClasse{public:MaClasse();~MaClasse();private:std::unique_ptr<ma_struct_c>s;//struct définie dans une_lib_en_c.h};MaClasse::MaClasse(){s=std::unique_ptr<ma_struct_c>(newma_struct_c);// il faut que j'implémente un deleter ?}MaClasse::~MaClasse(){}
et
/* main.cpp */#include<exception>#include"MaClasse.hh"intmain(){try{MaClasse::MaClassem;// allocation s'est bien passée, je peux continuer ?}catch(std::exceptionconst&e){// ici j'attrape l'éventuelle std::bad_alloc ?// et je gère le fait que l'allocation s'est mal passée ?}return0;}
Dans quel cas faut-il implémenter un deleter pour un unique_ptr ? Notamment si je dois nettoyer la structure pointée avant qu'elle soit libérée ? Le deleterpar défaut est appelé par le destructeur de MaClasse ?
Merci.
[^] # Re: quelques éléments de réponse
Posté par audionuma (site web personnel, Mastodon) . En réponse au message classe C++, membre structure C et allocation dynamique. Évalué à 1.
Donc par exemple :
et
Dans quel cas faut-il implémenter un
deleterpour ununique_ptr? Notamment si je dois nettoyer la structure pointée avant qu'elle soit libérée ? Ledeleterpar défaut est appelé par le destructeur de MaClasse ?Merci.