J'utilise boost shared_ptr avec mon propre gestionnaire de mémoire comme celui-ci (dépouillée par exemple, je l'espère, il n'y a aucune erreur dans celle-ci):Boost shared_ptr avec le placement surchargé nouveau/supprimer
class MemoryManager
{
public:
/** Allocate some memory.*/
inline void* allocate(size_t nbytes)
{
return malloc(nbytes);
}
/** Remove memory agian.*/
inline void deallocate(void* p)
{
free(p);
}
};
MemoryManager globalMM;
// New operators
inline void* operator new(size_t nbytes, ogl2d::MemoryManagerImpl& mm)
{
return globalMM.allocate(nbytes);
}
// Corresponding delete operators
inline void operator delete(void *p, ogl2d::MemoryManagerImpl& mm)
{
globalMM.deallocate(p);
}
/** Class for smart pointers, to ensure
* correct deletion by the memory manger.*/
class Deleter
{
public:
void operator()(void *p) {
globalMM.deallocate(p);
}
};
Et je l'utilise comme ceci:
shared_ptr<Object>(new(globalMM) Object, Deleter);
Mais maintenant je me rends compte. Si shared_ptr supprime mon objet, il appelle Deleter :: operator() et les objets sont supprimés. Mais le destructeur ne se fait pas appeler ...
Comment puis-je changer cela?