• [^] # Re: quelques éléments de réponse

    Posté par (site web personnel, Mastodon) . En réponse au message classe C++, membre structure C et allocation dynamique. Évalué à 1.

    Donc par exemple :

    /* maclasse.hh */
    #include <memory>
    #include "une_lib_en_c.h"
    class MaClasse {
    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>(new ma_struct_c);
     // il faut que j'implémente un deleter ?
    }
    MaClasse::~MaClasse() {
    }

    et

    /* main.cpp */
    #include <exception>
    #include "MaClasse.hh"
    int main() {
     try {
     MaClasse::MaClasse m;
     // allocation s'est bien passée, je peux continuer ?
     }
     catch (std::exception const& e) {
     // ici j'attrape l'éventuelle std::bad_alloc ?
     // et je gère le fait que l'allocation s'est mal passée ?
     }
     return 0;
    }

    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.