Disabling struct destructor illegal?
Simen Kjærås
simen.kjaras at gmail.com
Thu Jul 19 11:58:56 UTC 2018
On Thursday, 19 July 2018 at 10:04:34 UTC, RazvanN wrote:
> I just don't understand why you would ever mark the destructor
> of a struct with @disable. When is that useful? If it's not,
> why not just forbit it?
struct S1 {
~this() { /* stuff */ }
}
struct S2 {
S1 s;
@disable ~this();
}
The idea would be that S1's destructor not be called when S2 goes
out of scope. Now, that's not how @disable works, but it's a
logical thought.
The way @disable does work though, isn't to remove the marked
function, but forbid it from being called.
> why not make it illegal to disable the destructor if disabling
> it will surely result in errors wherever the struct is used.
Because the error message when you use it clearly states what's
wrong?
It's actually possible to use a struct with a @disabled
destructor:
struct S {
int i;
@disable ~this() {}
}
struct Nodestruct(T) {
ubyte[T.sizeof] _payload;
@property
ref T value() {
return *cast(T*)_payload.ptr;
}
}
The trick is, as you can see, to never have an instance on the
stack. This gives a small advantage over @disable this(this) and
@disable this() in that it's actually impossible to have a
stack-allocated instance.
--
Simen
More information about the Digitalmars-d-learn
mailing list