Probleme sur les vector de unique_ptr

Probleme sur les vector de unique_ptr

by Pierre Louis Sintre -
Number of replies: 3

Bonjour,

On utilise un tableau dynamique de unique_ptr dans notre projet et nous avons un soucis : nous n'arrivons à faire marcher ni un constructeur, ni un accesseur ; les voici :

accesseur :

vector<unique_ptr<Toupie>>& Systeme::get_tab() {
return tab; //tab étant le vecteur de unique_ptr dans notre classe Systeme
}

Constructeur :

Systeme::Systeme(vector<std::unique_ptr<Toupie>> v) : tab(v) {}

L'erreur semble etre la suivante (pour l'accesseur et le constructeur c'est la meme erreur) :
call to deleted constructor of
      'std::unique_ptr<Toupie, std::default_delete<Toupie>>'

Merci d'avance !

In reply to Pierre Louis Sintre

Re: Probleme sur les vector de unique_ptr

by Jean-Cédric Chappelier -

bon... plusieurs choses à reprendre ici.

  1. tout d'abord je rappelle qu'il NE FAUT PAS POSTER DE CODE DU PROJET sur le forum ; ceci est considéré comme de la fraude (vous donnez votre code aux autres) !
    Ici on est vraiment limite car c'est vraiment peu de lignes et surtout c'est assez faux, mais évitez  en cas de doute ; et faite l'effort de reformuler dans un autre contexte (de telles reformulsations aident d'ailleurs souvent à trouver l'erreur).

  2. ensuite, que pensez-vous du point de vue des principes de l'orienté-objet, d'une méthode get qui retourne une référence sur un attribut ?
    --> il ne faut JAMAIS faire cela (sauf très rares exceptions, comme toujours).
    Cela casse totalement l'encapsulation. On appelle cela une « fuite d'encapsulation ».
    Pourquoi diable votre Système devrait il devoir exposer son contenu ? à qui ? qui est « le chef » (= le propriétaire de tout) ?

  3. enfin, les unique_ptr ont pour propriété d'être... uniques ! Que pensez-vous qu'il se passe quand on copie des des vector de unique_ptr ? Faites un dessin.
Désolé d'être aussi direct. Ce n'est pas pour critiquer, mais pour insister sur des fondamentaux (et la forme [écriture succincte] n'aide pas à la diplomatie ;-) ). Je sais que lorsqu'on code on se laisse embarquer dans les détails techniques, on perd le recul. Il est important dans ces moments là, de justement prendre du recul et revenir aux fondamentaux.

In reply to Jean-Cédric Chappelier

Re: Probleme sur les vector de unique_ptr

by Matthew Dupraz -

Mais là, ne serait-il pas une solution de faire un accesseur qui rend une référence (constante) à la i-ème toupie du système, ou c'est aussi une fuite d'encapsulation? À quel point veut-on empêcher l'exterieur d'accéder au contenu de la classe?

In reply to Jean-Cédric Chappelier

Re: Probleme sur les vector de unique_ptr

by Pierre Louis Sintre -
Bonjour,
On est désolés, on ne pensait pas que poster une si petite portion du code pourrait etre considéré comme une fraude. Merci pour les infos.
Pierre Sintre et Guilhem Doat