This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c++/9982: placement new returns wrong value
- From: Thomas Kunert <kunert at physik dot tu-dresden dot de>
- To: bangerth at dealii dot org, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, kunert at physik dot tu-dresden dot de, nobody at gcc dot gnu dot org, gcc-gnats at gcc dot gnu dot org
- Date: Fri, 07 Mar 2003 14:21:54 +0100
- Subject: Re: c++/9982: placement new returns wrong value
- References: <20030306194107.31259.qmail@sources.redhat.com>
bangerth at dealii dot org wrote:
Synopsis: placement new returns wrong value
State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Mar 6 19:41:07 2003
State-Changed-Why:
This is not a bug. For array expressions, the compiler puts
the number of array elements into the first slot (pointed to
by the placement argument), and only then the elements of the
array. This is so because delete[] needs this information.
There is no delete[] corresponding to the placement new[], hence this is
useless. In many cases the compiler actually seems to figure that out:
changing the line
A * b = new(a) A[3];
to
A * b = new((void*)a) A[3];
makes a and b pointing to the same position. Why is the difference here?
But you are right, the standard seems to allow any behavior. However,
this makes operator new(a)[] pretty much useless, since the final
position of the new array is undefined and one does not even know the
necessary size of the provided memory region.
Thomas
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9982