Re: Free called instead of delete
In any case, my class' destructor is not called. It contains a
myStdMap.clear() call.
I am doing this because my class' myStdMap member calls Allocate() to new a
default element in the std::map constructor, which MFC eventually reports as
memory leak. This happens even if no element was added to myStdMap.
I was recommended to manually call myStdMap.clear() in my class' destructor.
But perhaps because ATL::CCRTAllocator::Free() was called, my break point in
the class' virtual destructor is never reached. (My class doesn't inherit
others. The break point in constructor is reached however)
Is there a way to perform 'go to definition' when mousing over delete to
know its exact definition?
Thanks
"Joseph M. Newcomer" wrote:
Note that for many classes,
void operator delete(void *p) { free(p); }
is the definition; the automatic inlining of code will therefore ignore the levels of
indirection and simply call 'free' directly.
Note, however, that you have confused a class method Free (note that it is in a DLL, and
it is ATL::CCRTAllocator::Free, not raw 'free'). So you are still some levels from the
raw free function of the C runtime.
joe
On Tue, 18 Aug 2009 15:16:01 -0700, BoHuang <BoHuang@discussions.microsoft.com> wrote:
I created an object in with new and
mfc90d.dll!operator new(unsigned int nSize=72, const char * lpszFileName=0x007f64e8, int nLine=183) Line 60 C++
myDLL.dll!Test::RTRT::RTRT() Line 183 + 0x11 bytes C++
And cleaned it up with delete. But instead of delete, Free is called:
mfc90d.dll!ATL::CCRTAllocator::Free(void * p=0x023e8d78) Line 247 C++
myDLL.dll!myRTRT::~myRTRT() Line 335 + 0x15 bytes C++
Is this due to delete being overloaded somewhere?
Thanks
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm