IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Libérer une ressource déplacée avec std::move.


Sujet :

Langage C++

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Libérer une ressource déplacée avec std::move.
    Salut!
    J'essaie de faire un gestionnaire de ressources, et je voudrais qu'il puisse se gérer dans un contexte multi-thread.

    Je fais donc ceci :

    J'instancie la ressource avec new (ou bien sans le new) ça dépend si j'ai besoin d'une allocation dynamique ou pas.
    Je déplace le contenu de la ressource dans une autre variable qui n'est pas un pointeur.

    Et j'utilise un compteur pour savoir combien de fois la ressource est copiée, ainsi, si elle est utilisée dans plusieurs thread, celle-ci n'est pas détruite tant que le thread n'a pas fini de l'utiliser.
    Je voudrais un truc très similaire à std::shared_pointer mais sans devoir faire forcément un compteur de référence ou bien un pointeur car je pourrais très bien charger des ressource depuis la mémoire, ou bien depuis un fichier, sans devoir retourner un shared_ptr sur la ressource à chaque fois, car ça m'embête au plus au point de devoir le ré-écrire à chaque fois.
    De plus mes ressource ne sont pas copiable, mais plutôt déplaçable, c'est donc un std::unique_ptr qui serait plutôt à utiliser dans ce cas, mais cette classe n'a pas de compteur de références.

    Bref j'ai donc tenté de créer un code de ce genre (avec une capsule RAII autour) :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int i = 1;
    int mi = std::forward<int>(i);
    std::cout<<&mi<<std::endl;
    delete &mi;
    std::cout<<&mi<<std::endl;

    Malheureusement ce code crash lors de la deletion, et j'ai cette erreur à l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    free() invalid pointer.
    Y a t'il moyen de libérer le contenu d'une ressource dont le contenu à été déplacer dans une autre variable ?
    Ou bien faut t'il impérativement utiliser la même variable que celle qui alloue le contenu ?

    Merci.

    PS : je sais qu'il est impossible de libérer du contenu qui n'a pas été allouer avec new mais je chercher actuellement une alternative.
    Dernière modification par Invité ; 24/09/2014 à 21h13.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Libérer une ressource sans la fermer (socket)
    Par Miaow dans le forum Langage
    Réponses: 1
    Dernier message: 10/03/2014, 22h48
  2. Réponses: 8
    Dernier message: 13/01/2012, 11h47
  3. Libérer les ressources d'une fenêtre
    Par MiniCesc dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 29/09/2010, 11h22
  4. Réponses: 2
    Dernier message: 24/08/2008, 18h58
  5. Réponses: 6
    Dernier message: 02/05/2007, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo