RAII and classes

cym13 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Mar 9 02:48:30 PST 2016


On Wednesday, 9 March 2016 at 10:28:06 UTC, John Colvin wrote:
> Potential for leaking references from alias this aside, is 
> there some reason that I shouldn't do this for all my C++-like 
> RAII needs:
>
> class A
> {
> 	~this(){ import std.stdio; writeln("hello"); }
> }
>
> auto RAII(T)()
> if (is(T == class))
> {
> 	struct Inner
> 	{
> 		private ubyte[__traits(classInstanceSize, T)] buff;
> 		T c;
> 		alias c this;
> 		
> 		~this()
> 		{
> 			destroy(c);
> 		}
> 	}
> 	Inner tmp;
> 	import std.conv : emplace;
> 	tmp.c = tmp.buff.emplace!T;
> 	return tmp;
> }
>
> void main()
> {
> 	auto a = RAII!A;
> }

That's almost literally what std.typecons.scoped does.


More information about the Digitalmars-d-learn mailing list