On 15/08/16 18:31 +0100, Jonathan Wakely wrote:
In a later patch I'd also like to simplify the example to remove the
build(void) function and just do A* a = new A; in main(), because the
build function doesn't seem to serve any purpose. The assertion in the
example doesn't fail, so it doesn't demonstrate the problem, and so
the attribute((noinline)) is just noise. Am I missing something?
I'd also like to replace the GNU coding style with more idiomatic C++.
This is meant to be documentation for end-users writing C++, who don't
typically put spaces before the argument list of a function, or use
(void) for functions with no arguments. Writing (void) is redundant in
C++, and even sometimes considered an abomination.
I think this would be an improvement, although I still can't get the
assertion to fail:
#include <stdlib.h>
#include <string.h>
#include <assert.h>
struct A
{
A() {}
void* operator new(size_t s)
{
void* ptr = malloc(s);
memset(ptr, 0, s);
return ptr;
}
void operator delete(void* ptr) { free(ptr); }
int value;
};
int main()
{
A* a = new A;
assert(a->value == 0); /* Use of uninitialized value */
delete a;
}