Tasteless mimic of operator new: Call ctor
Hello Gurus,
I'm working on a few generic code sequences which should in some ways mimic the functionality of global operator new. I believe the code might be considered in bad taste. However, I would still be curious if there are syntaxes available for this.
I want to mimic new in so far as it takes (or allocates) a chunk of memory and calls a ctor on it.
My codes are below. The upper ctor call works for VS2010 but not for GCC 4.5.0. The template works for neither.
- Can anyone help out with the syntaxes of these codes?
- Is it even possible to call ctors directly on a chunk of memory in these ways?
Thanks. Sincerely, Chris.
Code:
#include <iostream>
typedef unsigned char UINT8;
struct Wrapper
{
unsigned x;
Wrapper(const unsigned X = 1u) : x(X) { }
};
namespace
{
UINT8 pool[64u];
}
template<typename T> T* alloc(void)
{
((T*) pool)->T::T();
}
int main()
{
// Can not call constructor directly?
// Is there a syntax for this?
((Wrapper*) pool)->Wrapper::Wrapper();
const Wrapper* p1 = (Wrapper*) pool;
std::cout << p1->x << std::endl;
// Does not seem to work.
// Wrapper does not have member function T.
// Any syntax for this?
const Wrapper* p2 = alloc<Wrapper>();
std::cout << p2->x << std::endl;
}
You're gonna go blind staring into that box all day.