[GiNaC-list] memory allocation, matrices
David Fang
fang at csl.cornell.edu
Mon Sep 11 23:32:14 CEST 2006
Hi,
> > In C++, you should never invoke dtors explicitly, unless you do
> > such dirty tricks as discussed in June on this list:
> > <http://www.ginac.de/pipermail/ginac-list/2006-June/thread.html>.
Another place where one might explicitly call dtors is when writing
placement new/delete operators in C++. But let's not get too carried away
on that subject...
> Thanks! This thread is exactly what I was looking for. Can you briefly
> explain the meaning of reinterpret_cast<GiNaC::ex*>? Wouldn't
> <GiNaC::ex*> be sufficient? Also, in GiNaC, if I have an expression
> that is actually a symbol, say, how do I determine at compile time
> what destructor to call, ~ex or ~symbol?
libstdc++ often uses a helper function to deduce the argument type, and
hence its destructor (copied straight from gcc's <bits/stl_construct.h>):
namespace std {
template <class _Tp>
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
}
Then "std::_Destroy(&your_object);" will call the appropriate in-charge
destructor, be it virtual or non-virtual.
For maximum portability, I wouldn't count on std::_Destroy existing, you
you might as well define your own, until such a function is standardized.
> I will need to invoke the destructor explicitly in the deallocation
> code of my Objective C object.
However, I don't know the syntax in Objective C.
Fang
More information about the GiNaC-list
mailing list