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