Re: D RAII with postblit disabled

2018-03-28 Thread Norm via Digitalmars-d-learn

On Thursday, 29 March 2018 at 04:16:55 UTC, Adam D. Ruppe wrote:

On Thursday, 29 March 2018 at 04:12:38 UTC, Norm wrote:
Is there a way to do this in D, or does it require special 
"create" functions for every struct that has a RAII-like 
struct as a member?


You'll have to do it all the way up (unless you can use a 
constructor with an argument and call that instead)


OK, thanks.


Re: D RAII with postblit disabled

2018-03-28 Thread Adam D. Ruppe via Digitalmars-d-learn

On Thursday, 29 March 2018 at 04:12:38 UTC, Norm wrote:
Is there a way to do this in D, or does it require special 
"create" functions for every struct that has a RAII-like struct 
as a member?


You'll have to do it all the way up (unless you can use a 
constructor with an argument and call that instead)


Re: D RAII with postblit disabled

2018-03-28 Thread Norm via Digitalmars-d-learn

On Tuesday, 27 March 2018 at 02:43:15 UTC, Adam D. Ruppe wrote:

On Tuesday, 27 March 2018 at 02:35:23 UTC, Norm wrote:

What's the best way to do this in D?


I'd also add `@disable this();` and then a `static O make() { 
return O(theAllocator.make!int(99)); }`


than you construct it with that static make function.


OK, that got me over the first hurdle but I still cannot use RAII 
with struct member vars. E.g.


---
struct Resource {
  this() {allocate_something();}
  ~this() {release_something();}
}

struct S {
  Resource resource;
}

---

Is there a way to do this in D, or does it require special 
"create" functions for every struct that has a RAII-like struct 
as a member?



Thanks,
Norm


Re: D RAII with postblit disabled

2018-03-26 Thread Norm via Digitalmars-d-learn

On Tuesday, 27 March 2018 at 02:43:15 UTC, Adam D. Ruppe wrote:

On Tuesday, 27 March 2018 at 02:35:23 UTC, Norm wrote:

What's the best way to do this in D?


I'd also add `@disable this();` and then a `static O make() { 
return O(theAllocator.make!int(99)); }`


than you construct it with that static make function.


Perfect, thanks.


Re: D RAII with postblit disabled

2018-03-26 Thread Adam D. Ruppe via Digitalmars-d-learn

On Tuesday, 27 March 2018 at 02:35:23 UTC, Norm wrote:

What's the best way to do this in D?


I'd also add `@disable this();` and then a `static O make() { 
return O(theAllocator.make!int(99)); }`


than you construct it with that static make function.


D RAII with postblit disabled

2018-03-26 Thread Norm via Digitalmars-d-learn

Hi All,

What's the best way to do this in D?

E.g.

---
struct O
{
  int* value;
  @disable this(this);
/+
  this()
  {
this.value = theAllocator.make!int(99);
  }
+/
  ~this()
  {
theAllocator.dispose(this.value);
  }
}

O obj = O(); // Ideally this would be allocated but it simply run 
O.init

---

Thanks
Norm