On Wednesday, 5 November 2014 at 19:44:57 UTC, luminousone wrote:
On Wednesday, 5 November 2014 at 19:05:32 UTC, Patrick Jeeves
wrote:
On Wednesday, 5 November 2014 at 18:56:08 UTC, luminousone
wrote:
unless delete is explicitly called, I don't believe the
destructor would ever be called, it would still have a
reference in the static foo_list object that would stop it
from being collected by the gc.
This is exactly why I asked about it, and even if delete is
explicitly called-- which i believe is deprecated, wouldn't
the runtime fill the space with the default construtor until
the GC decides to remove it? meaning it would be immediatly
added back into the list?
I don't believe that the default constructor is called. I am
pretty sure delete immediately deallocates the object,
deregistering its memory from the gc.
In fact I am 99% sure no constructor is called after delete, it
would cause problems for objects with no default constructor,
or for system related stuff done in constructors, and I haven't
seen anything like that in my X11 work in d.
I guess I got confused by something... I don't know. But what
I'd really like is for it to be garbage colleceted when no
references outside of that static array exist, as i mentioned at
the bottom of my first post. I illustrated my example with that
specific class because when i looked up weak pointers on the
site I found discussions getting caught up with how to avoid
dangling pointers when weak pointers are used; and I wanted to
illustrate that that's a non-issue in this case, because I wasn't
sure how much that contributed to the solutions given.
I suppose it doesn't matter because this is based on something I
do with multiple inheritance in C++, I felt like I may be able to
get it to work in D because the only public members of those
classes were always pure virtual functions.
As an aside, how does scope(success) work in the context of a
constructor? given:
abstract class foo
{
this()
{
scope(success) onAdd();
}
~this()
{
onRemove();
}
onAdd();
onRemove();
}
class bar : foo
{
int _a;
this(int a)
{
_a = a;
}
void onAdd(){ writeln(_a); }
void onRemove() { writeln(_a); }
}
is _a defined as anything in either of writes? or would it be
called at the wrong time relative to setting _a?