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