Structs should not contain pointers to internal data
    Jonathan M Davis 
    jmdavisProg at gmx.com
       
    Sun Jun  2 22:38:00 PDT 2013
    
    
  
On Monday, June 03, 2013 10:23:43 Saurabh Das wrote:
> Hello Learn-D,
> 
> I'm new to D from a C/C++ background. One caveat of defining structs in D
> that I came across was that structs should be bit-wise relocatable and
> hence should not contain pointers to internal data members.
> 
> So that essentially means that code of the form (below) is disallowed.
> 
> struct S1
> {
>     int x;
>     int* p = &x;
> }
> 
> What I'm wondering is, are references also disallowed? As in:
> 
> struct S2
> {
>     int x;
>     ref int p = x;
> }
> 
> I ask this because in C++, I have a telemetry class which publishes the
> value of any member variable over TCP. I was trying to achieve similar
> functionality in D and am wondering how to go about designing it.
It's not legal to use ref on local variables, just function parameters, so 
it's not even a question of whether a struct can have a ref to itself. It 
can't have a ref in the first place.
> Ideally I'd like to have:
> 
> struct Telemetry(T) ...
> 
> struct UsefulStruct
> {
>     int importantValue;
>     auto tel1 = Telemetry!int(importantValue);
> }
> 
> Essentially I'm asking whether the above is a valid construct in D.
Well, you could pass importantValue by ref to Telemetry's constructor, but 
since it's impossible for it to keep a ref to it, you're not going to run into 
problems with UsefulStruct having a reference to itself or Telemetry having a 
reference to anything in UsefulStruct. You're only option is pointers, and you 
can't do anything that won't work if a struct is moved with a bitwise copy, or 
you'll have nasty bugs.
- Jonathan M Davis
    
    
More information about the Digitalmars-d-learn
mailing list