Thread overview | |||||
---|---|---|---|---|---|
|
March 09, 2016 RAII and classes | ||||
---|---|---|---|---|
| ||||
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; } |
March 09, 2016 Re: RAII and classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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.
|
March 09, 2016 Re: RAII and classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to cym13 | 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 .....
|
Copyright © 1999-2021 by the D Language Foundation