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