Index: ext/libicpf/src/callback.cpp =================================================================== diff -u -N -rc53cff389f468ccd962ceeea6c1f45da58a49258 -r338a33bbdb8c82416f0351408eea3243520784e5 --- ext/libicpf/src/callback.cpp (.../callback.cpp) (revision c53cff389f468ccd962ceeea6c1f45da58a49258) +++ ext/libicpf/src/callback.cpp (.../callback.cpp) (revision 338a33bbdb8c82416f0351408eea3243520784e5) @@ -22,21 +22,53 @@ */ #include "callback.h" #include +#include BEGIN_ICPF_NAMESPACE #define STORAGE ((std::vector*)m_pStorage) -callback_list::callback_list() +callback_list::callback_list() : + m_lock(), + m_pStorage(NULL) { m_pStorage=(void*)new std::vector; } +callback_list::callback_list(const callback_list& rSrc) : + m_lock(), + m_pStorage(NULL) +{ + m_pStorage=(void*)new std::vector; + STORAGE->assign(((std::vector*)rSrc.m_pStorage)->begin(), ((std::vector*)rSrc.m_pStorage)->end()); + assert(false); // we should not use the copy constructor at all !!! +} + callback_list::~callback_list() { - delete STORAGE; + try + { + delete STORAGE; + } + catch(...) + { + + } } +const callback_list& callback_list::operator=(const callback_list& rSrc) +{ + assert(false); // we shouldn't use the assignment operator at all!!! + if (this != &rSrc) + { + delete STORAGE; + m_pStorage=(void*)new std::vector; + STORAGE->assign(((std::vector*)rSrc.m_pStorage)->begin(), ((std::vector*)rSrc.m_pStorage)->end()); + } + + return *this; +} + void callback_list::add(PFNFUNC pfn, ptr_t param) { m_lock.lock();