<div dir="ltr">Thanks David for your valuable inputs.<div><br></div><div>Hi Richard,</div><div><br></div><div>Any comments on this behaviour??</div><div><br></div><div>Thanks,</div><div>Rahul</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Nov 27, 2013 at 12:43 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Tue, Nov 26, 2013 at 10:53 AM, Rahul Jain <<a href="mailto:1989.rahuljain@gmail.com">1989.rahuljain@gmail.com</a>> wrote:<br>
> I think I got something relevant: Do these words make any sense in our<br>
> context?<br>
<br>
</div>Not quite<br>
<div class="im"><br>
> An allocation or deallocation function<br>
<br>
</div>Allocation/deallocation function does not refer to<br>
constructor/destructor. See 3.4p1:<br>
<br>
"A C++ implementation provides access to, and management of, dynamic<br>
storage via the global allocation functions operator new and operator<br>
new[] and the global deallocation functions operator delete and<br>
operator delete[]."<br>
<br>
These are actually not the ctor/dtor, in 3.4p2 their declarations are shown as:<br>
<br>
void* operator new(std::size_t);<br>
void* operator new[](std::size_t);<br>
void operator delete(void*);<br>
void operator delete[](void*);<br>
<br>
So, roughly, if you say "new T" first operator new(sizeof(T)) is<br>
called, then the ctor for T is called on the returned storage, if the<br>
T ctor throws, then operator delete is called on the storage before<br>
the exception is propagated (that's why even non-array "new T"<br>
odr-uses the deallocation function, operator delete - even though it<br>
doesn't/shouldn't odr-use T's dtor).<br>
<div class="im"><br>
> for a class is odr-used by a<br>
> new expression appearing in a potentially-evaluated expression as specified<br>
> in 5.3.4(New) and 12.5(Free store). A deallocation function for a class is<br>
> odr-used by a delete expression appearing in a potentially-evaluated<br>
> expression as specified in 5.3.5(Delete) and 12.5(Free store).<br>
><br>
> What exactly does one mean by saying that something is odr-used?<br>
<br>
</div>The simplistic interpretation is that if something is odr-used it must<br>
be defined (ie: there must be (one) definition). For example:<br>
<br>
void f1();<br>
void f2();<br>
<br>
int main() {<br>
  f1(); // odr use of f1 - the program is ill-formed if 'f1' is not defined<br>
  size_t s = sizeof(f2); // non-odr-use of f2 - the program is valid<br>
even if 'f2' is never defined<br>
}<br>
</blockquote></div><br></div>