On Wednesday, 3 April 2013 at 15:25:22 UTC, Tobias Pankrath wrote:
On Wednesday, 3 April 2013 at 14:47:22 UTC, John Colvin wrote:
On Wednesday, 3 April 2013 at 11:05:06 UTC, Tobias Pankrath wrote:
basic idea.
---
T x;
T* px = new T(x);
---
int x
int* px = new int(x); // fails
---

I need to do this for structs and basic types. What's the standard way to do this?

Do you need to use new? i.e. do you need the variable to be allocated on the heap? Also, as you've written it, px is not a pointer to x which is a bit misleading. What is the result you actually want?

I need a fresh T (let's call it t) allocated on the heap and a pointer (pt) to it and the value of t should be the value of x.

---
T x;
int* pt = new T;
*pt = x;
---

Maybe I'll just do this.

int* pt = new T; //that will only compile if T is int. I assume you meant:
T* pt = new T;

Other than that, what you have done there should work.

To avoid any superfluous initialisation of fields:

import core.memory : malloc;
T x;

T* pt = cast(T*)malloc(T.sizeof);
*pt = x;

note: this is not C malloc, the memory is requested from and managed by the GC.

Reply via email to