Re: when delete do not call destructor
S S wrote:
What can be the situations when delete does not call destructor? I
have overloaded operator delete.
delete operator and operator delete are different things. The former
calls the destructor, the latter is your overloaded deallocation function.
class A{
public:
...new is also overloaded
...
void operator delete(void* p, size_t n) {deallocate(p, n);}
..
..
~A() {}
};
When I call
delete A;
That's almost impossible. 'A' is the name of the type. Please post
real code.
It gives error,
*** glibc detected *** free(): invalid pointer: 0x00000003ffff01480
How was the pointer obtained? Did you 'new' it? Or did you just take
the address of a static variable or an automatic variable? Are you by
chance trying to delete something twice?
It gives below stack trace,
#0 0x000000328d42e25d in raise () from /lib64/tls/libc.so.6
#1 0x000000328d42fa5e in abort () from /lib64/tls/libc.so.6
#2 0x000000328d4635e1 in __libc_message () from /lib64/tls/libc.so.6
#3 0x000000328d4691ee in _int_free () from /lib64/tls/libc.so.6
#4 0x000000328d469586 in free () from /lib64/tls/libc.so.6
#5 0x0000002a9bf9ff3e in operator delete () from /usr/lib64/libstdc+
+.so.5
I think delete do not take me to my deallocation routine and try to
free the memory itself which of course do not exist. Memory exist is
my own created heap which must be deallocated (effectively my
deallocation routine should be called)
Besides setting breakpoint in destructor does not reach there. I think
delete must always call destructor?
Yes. But I don't think it's the issue here. It calls the destructor
and *then* deallocates memory. You will not see the destructor in the
call stack *unless* you put the breakpoint in the destructor itself.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask