Re: Operator Overloading: new and new[] operators
* Frank Birbacher:
Hi!
Alf P. Steinbach schrieb:
Oh. You're asking about things I haven't used in a great many years.
But anyway,
Thanks for your commitment to explaining this! :)
Formally, if in a class you declare operator(void*) then that is the
usual
deallocation function, the one that will be invoked by a delete
expression, and
if you don't declare that but do declare an operator(void*,size_t)
then that is
the usual deallocation function. Templated delete operators are never
usual
deallocation function, and must have two or more arguments.
Templated delete operators? Do you mean I can have a
template<typename Iter>
operator delete(void*, Iter first, Iter last);
??
Yes. Formally, at least the way I interpret the standard. I've /never/ needed to
do that, so it's probably one of the most useless language features, probably
the absolutely most useless, and so I can't say whether my interpretation of the
standard is correct or whether supported by compilers.
What would the parameters be? For "operator new" I can understand
additional parameters, like in "new(stor.begin(), stor.end()) MyClass".
But how would the deallocation function receive parameters?
Apart from an explicit call, there's just one way: being called automatically by
a new-expression when the constructor throws.
Failing to define a corresponding placement deallocation function when one has
used a placement allocation function (like, a debug version that keeps track of
where allocations were done), leads to memory leakage when constructors throw.
Is
"delete(first, last) pointerToMyClass;" a valid statement?
No.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]