On Saturday, 25 February 2017 at 08:36:02 UTC, Ali Çehreli wrote:
On 02/25/2017 12:17 AM, Radu wrote:

> destroy(cc) -> does c = C.init
> destroy(*cc); -> calls the C dtor
>
> Is this by design? If so - how can I destroy and get the dtor
called
> without dereferencing the pointer?

It's by design because setting a pointer to null can be considered as destroying the pointer. Dereferencing is the right way of destroying the object through the pointer.

I had added the following warning after somebody else was burnt by this feature. :)

  http://ddili.org/ders/d.en/memory.html#ix_memory.destroy

Ali

I think this is BAD. Why?

- it is one of those WAT?? moments that brings a RTFM slap to you. The defaults should not be surprising, and in this case straight dangerous as it can lead to leaks. - it is not always possible to dereference the pointer, think some circular structures where deref would get you one of those fwd. declaration errors. - the deprecated delete will call the dtor, destroy is suppose to replace delete - hence it should work the same.

In my opinion destroy should do this:
- call dtor if the pointer type has one defined
- nullify the pointer

This is what I was expecting anyhow to happen...

Reply via email to