Re: Sequence container capacity after calling clear()
On Friday, 5 April 2013 13:44:08 UTC+3, Daniel Kr?gler wrote:
On 2013-04-05 07:46, Balog Pal wrote:
To me that case is the same as copy-elision. For that the standard
grants a license to remove a cctor/dtor pair despite it can be
user-defined and can have observable behavior. The supposed
semantics suggest the actions shall cancel out properly.
Is there a reason the same license to eliminate could not be
provided for op new/delete pair?
How do you define such a new/delete pair?
For example like that:
template<class T>
T* factory( int i )
{
T* p = new T; // <- this is THE new of pair
// Some code dealing with *p and i
// that sometimes returns *p.
// when T is int it can't do nothing and so may be erased.
delete p; // <- this is THE delete of pair
return nullptr;
}
That is situation that stops compilers from optimizing all the
contents of 'factory<int>(42)' (and so call to it) out and so we have
to work on it and manually specialize.
new/delete calls are completely independent and there exists no
control by the core language for them.
Return values also can't be always optimized out. It could be far from
all pairs of new and delete. For example if compiler can prove that
everything done with *p between new and delete is pointless and *p
was default or copy-constructed then the pair may be elided.
Same like with copy constructor and destructor of return value.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]