RAII and classes

John Colvin via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Mar 9 02:54:42 PST 2016


On Wednesday, 9 March 2016 at 10:48:30 UTC, cym13 wrote:
> 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.

Ok, I forgot std.typecons.scoped, nothing to see here .....


More information about the Digitalmars-d-learn mailing list