I tried a few things. The new[] operator (or deallocation of arrays) seems to be broken:
Code:
#include <iostream>
struct Test
{
Test() { std::cout << "Test()\n"; }
~Test() { std::cout << "~Test()\n"; }
};
int main()
{
nuiMemoryPool pool(1024);
try {
Test* t = new (pool, Wrapper<Test>()) Test[2];
}
catch (std::exception& e) {
std::cout << e.what() << '\n';
}
};
Outputs:
Test()
Test()
~Test()
~Test()
~Test()
~Test()
~Test()
~Test()
It also seems that if you are out of memory you should throw an exception and not return NULL, otherwise the program just crashes.
The nuiMemoryPoolGuard is either broken or I don't get its usage:
Code:
int main()
{
nuiMemoryPool pool(1024);
Test* t = new (pool, Wrapper<Test>()) Test;
{
nuiMemoryPoolGuard guard(pool);
Test* u = new (pool, Wrapper<Test>()) Test;
}
};
This leaves u undestructed.
And Clear offers other misuse:
Code:
int main()
{
nuiMemoryPool pool(1024);
Test* t = new (pool, Wrapper<Test>()) Test;
{
nuiMemoryPoolGuard guard(pool);
Test* u = new (pool, Wrapper<Test>()) Test;
pool.Clear();
}
};
This runs destructor three times.
* I typedeffed uint8 as unsigned char.