Constructeur par recopie (memory leak ?) - C++ - Programmation
Marsh Posté le 28-01-2010 à 18:02:04
oui, ca leake. Il n'y a rien de magique, quand tu fais une allocation, on te donne l'adresse allouée. Si tu perds cette adresse, c'est une fuite mémoire.
Pourquoi faire des allocations dynamiques dans ton cas plutôt que d'utiliser des temporaires ?
Marsh Posté le 28-01-2010 à 19:32:31
unique_ptr<T> ou totu autre encapsultaion de T* qui conserve l'ownership
Marsh Posté le 01-02-2010 à 10:33:52
@theshockwave : Ce n'est pas moi qui a codé la partie en C, elle vient d'une lib.
@Joel : Je voudrais plutôt éviter la recopie si possible car un objet "model" peut être relativement gros. Il vaudrait mieux que je fasse un wrapper je pense.
Merci pour vos réponses en tout cas.
Marsh Posté le 01-02-2010 à 11:28:00
Faire un wrapper quand on a une lib C et qu'on est en C++, c'est souvent une bonne idée.
Par contre ,la manière dont tu pars avec ta classe MyModel est à revoir.
Soit tu conserves un pointeur sur l'instance en interne de ta classe parce que tu as des contraintes (du style la lib te propose une fonction d'allocation qui initialise des membres de manière opaque) soit tu agrèges ta structure.
Dans les deux cas, voudras-tu vraiment avoir un constructeur de copie ?
Marsh Posté le 01-02-2010 à 11:45:50
C'est pas exactement un constructeur par copie dont j'ai besoin.
J'ai besoin d'un des constructeurs suivants (l'un ou l'autre).
Code :
|
Bof je pense que je vais accepter de faire une copie à la contruction et virer le memory leak en gardant un pointeur sur le retour de hello().
En fait, je trouve pas mal de garder l'adapter sous la forme d'un heritage ça rend le code plus lisible à côté.
Marsh Posté le 01-02-2010 à 16:30:11
Lan Wezel a écrit : @Joel : Je voudrais plutôt éviter la recopie si possible car un objet "model" peut être relativement gros. Il vaudrait mieux que je fasse un wrapper je pense. |
unique_ptr<T> ne copie rien, il fait juste le delete tout seul.
Marsh Posté le 01-02-2010 à 16:44:40
@theshockwave : ouais ce qui est l'équivalent de ce que propose Joel sauf que j'ai la flemme de tirer boost juste pour un unique_ptr donc je le fais à la main. Je n'ai aucune maitrise sur hello() elle est dans une lib.
@Joel : j'ai vu dans la doc ce qu'il fait, ce que je voulais dire c'est que le unique_ptr résout le memory leak, mais pas le fait que j'ai pas très envie de recopier l'objet de la lib. Mais bon finalement je m'y suis résolu car ce sera juste à l'initialisation ce truc.
Marsh Posté le 01-02-2010 à 18:09:50
y a toujours bcp pour extraire des sous modules de boost.
Inclure le .hpp dans ton code est aussi envisageable vu la license faible de boost
Marsh Posté le 28-01-2010 à 17:35:17
Bonjour,
Je voudrais savoir si ce code génère un memory leak à l'appel du constructeur par recopie.
Je suis en train de faire un adapter pour utiliser des struct d'une lib C
mon objet de la lib C
mon adapter C++
et enfin l'appel
En fait je me demande s'il y a un memory leak du fait que l'objet model est alloué dans la fonction hello.
Je pense qu'il y en a un car le constructeur par recopie par défaut doit recopier l'objet. Pourriez-vous me le confirmer ?
Message édité par Lan Wezel le 28-01-2010 à 17:37:56