RAII
Adrian Matoga via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 23 03:39:55 PST 2017
On Thursday, 23 February 2017 at 09:52:26 UTC, Arun
Chandrasekaran wrote:
> I'm trying to write an RAII wrapper on Linux.
>
> I understand struct in D doesn't have default constructor (for
> .init reasons).
> I don't want to use `scope`.
>
> Is there an elegant way to achieve this in D?
>
static opCall() is the way to emulate an argumentless struct
constructor. You still need to call it explicitly, though:
```
import std.stdio : writefln;
struct Foo {
int a;
static Foo opCall() {
Foo foo;
foo.a = 42;
return foo;
}
~this() {
writefln("destroyed with a=%d", a);
}
@disable this(this);
@disable void opAssign(Foo);
}
void main()
{
auto foo1 = Foo(); // ok
Foo foo2; // == Foo.init
}
```
More information about the Digitalmars-d-learn
mailing list