| 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
Permalink
Reply