On Sunday, 17 March 2013 at 15:20:04 UTC, Jakob Ovrum wrote:
On Saturday, 16 March 2013 at 14:40:58 UTC, D-ratiseur wrote:
new is overriden in TUObject because the purpose of the
library is to bypass the garbage collector and to bypass the
GC you have to override new and delete.(at least according to
the manual: articles,mem managment).
The documentation on this is old and misleading.
Overloading of new and delete is deprecated (the delete
operator in its entirety is deprecated).
Having them overloadable was not a very good idea. The current
approach is to have "new" always mean GC memory, which is why
there is no need for delete. This way, code that uses 'new'
won't break horribly or leak depending on the type involved,
important for generic code. Code that doesn't use the GC has to
be designed for it; you can't just remove the GC under
everyone's noses and expect things to work.
For different kinds of memory, you should simply use a
different allocator. For example, here's a rough approximation
of a pair of functions using malloc/free for class allocation:
T alloc(T)() if(is(T == class))
{
enum size = __traits(classInstanceSize, T);
auto p = enforceEx!OutOfMemoryError(malloc(size));
return emplace!T(p[0 .. size]);
}
void dealloc(T)(ref T obj) if(is(T == class))
{
free(cast(void*)obj);
obj = null;
}
It can easily be overloaded to support all types.
In the future, Phobos will have a custom memory allocator
library, which modules like std.container will use, though to
which extent is not clear (for example, will it also use the
custom allocator for exception objects?). Nevertheless it will
probably be a good base for other libraries to easily support
non-GC allocators.
Thx, that's some very usefull info...however curently "Unmanaged"
have its own leak tracer, basically it's a compiler switch that
allows to record every call to alloc(), realloc() and free().
Once again there must be a kind of misunderstanding about the
lib. It's made to bypass the GC...and it's not under everybody
nose ! I clearly state about this and the code is made for that
purpose.
Anyway, it's possible that I've been, until now, a bit naive
about the manual...For example in the win chm, object classinfo
pretends to have this member:
---
const(MemberInfo[]) getMembers(in char[] name);
Search for all members with the name 'name'. If name[] is null,
return all members".
---
Which is the most mysterious method ever...since it seems not
exist at all... ;)