Finding and invoking struct destructors in D2

Don nospam at nospam.com
Thu May 27 12:39:04 PDT 2010


div0 wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Pillsy wrote:
>> Hi, all,
>>
>> I was wondering if there's any way to determine at compile time
>> whether a struct has a (non-trivial) destructor associated with it,
>> and whether there's any way to call that destructor without using
>> the delete operator. It seems like being able to do these two
>> things would allow you to make a container that plays well with
>> structs that are designed to do (say) reference counting, but I
>> don't see anything in the spec on the website that shows how this
>> might be accomplished.
>>
>> Thanks!
>> Pillsy
> 
> Struct and class destructors are called __dtor.
> This is undocumented though and therefore not guaranteed to work in
> future versions or other(!) implementations:
> 
> struct foo {
> 	~this()
> 	{
> 	}
> }
> 
> int main(){
> 
> 	foo	b;
> 
> 	static if(__traits(compiles, b.__dtor()))
> 	{
> 		pragma (msg, "got destructor");
> 	}
> 	else
> 	{
> 		pragma (msg, "no destructor");
> 	}
> 
> 	return 0;
> }
> 
> 
> There are various struct destructor bugs still open though, so I
> wouldn't count on being able to do a ref counted objects at the moment:
> 
> Most important is this one, which scuppers any change of doing a shared
> ptr like struct:
> 
> http://d.puremagic.com/issues/show_bug.cgi?id=3516

Yup, that's #3 on my list of Ten Must-fix Bugs.

This related one is pretty bad too.
 > http://d.puremagic.com/issues/show_bug.cgi?id=3323

> 
> - --
> My enormous talent is exceeded only by my outrageous laziness.
> http://www.ssTk.co.uk
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.7 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> 
> iD8DBQFL/rG7T9LetA9XoXwRAkcyAJ9e/nXmNanAC9L4m6oCRbSk+EruzACfRgOJ
> j0xFjV7F4Onz3rSFXeUkq+k=
> =1nFQ
> -----END PGP SIGNATURE-----


More information about the Digitalmars-d-learn mailing list