Challenge: write a reference counted slice that works as much as possible like a built-in slice

RazvanN razvan.nitu1305 at gmail.com
Wed Dec 15 08:27:25 UTC 2021


On Tuesday, 14 December 2021 at 12:14:52 UTC, Tejas wrote:

>
> Sorry for reviving this thread, was just sifting through...
> The following code also outputs `dtor!`, unfortunately :(
>
> ```d
>
> import std.stdio:writeln;
>
> struct S{
> 	@disable this();
> 	~this(){
> 		writeln("dtor!");
> 	}
> }	
>
> void main(){
> 	S s = void;
> }
>
> ```
>
> Compiler :
> LDC - the LLVM D compiler (1.25.0):
>   based on DMD v2.095.1 and LLVM 11.1.0

This has come up in the past and typically folks have agreed that 
once you used void initialization it is your problem to make sure 
that the object is valid before destruction. I, personally, do 
not agree with that; since you are bypassing construction, you 
should also bypass destruction, however, an argument can be made 
for both sides.

My perspective is that currently you have an easy way to bypass 
destruction but you need to do the union trick to bypass 
destruction. I would vote for having a dip that would somehow 
make it easy to express the intent that you want to avoid 
destruction for a specific object.


More information about the Digitalmars-d mailing list