How to turn this C++ into D?
Patrick Jeeves via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Nov 5 12:31:52 PST 2014
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?
More information about the Digitalmars-d-learn
mailing list