Bonjour,
Voici une présentation brève de mon programme :
- j'utilise la librairie Qt
- je compile sous linux avec g++.
- j'ai un programme principal, limité à la fonction main.
- et 3 librairies dynamiques dont une déclare dans un .h une surcharge de l'opérateur delete comme suit :
Elle déclare également une surcharge de new.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void operator delete(void *inPointer) { ... }
Mon problème est le suivant :
- si delete n'est pas utilisé dans main(), mon opérateur delete n'est jamais appelé dans le reste du programme alors que le .h en question est correctement inclu partout. Par contre, mon opérateur new est correctement appelé de partout.
- par contre si j'utilise delete au moins une fois dans la fonction main(), alors non seulement c'est mon delete qui est appelé mais en plus, il sera alors appelé partout ailleurs dans mon programme ! Mon opérateur new est également appelé, comme dans le premier cas.
Voici rapidement les pistes que j'ai explorées :
- essai de tous les prototypes possibles pour delete
- recherche d'une surcharge de delete dans les sources de Qt, des fois qu'il y en ait une qui écrase la mienne, je n'en ai pas trouvé.
- j'ai créé un petit programme équivalent mais limité au strict minimum (plus de Qt, juste une fonction main et une librairie dynamique) et le problème n'y apparaît pas.
Ce qui m'épate, c'est le comportement qui diffère suivant que j'utilise ou non delete dans main(). J'insiste sur le fait que lors de mon test, hormis ces deux lignes
que je rajoute dans main(), je ne change pas une virgule au reste du code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double *temp = new double; delete temp;
Là, je sèche, avez-vous d'autres idées ?
Merci d'avance !
Partager