New With Struct and Getting Class Object Pointers

Vijay Nayar madric at gmail.com
Sun Sep 30 09:30:38 UTC 2018


On Sunday, 30 September 2018 at 09:16:42 UTC, Nicholas Wilson 
wrote:
> On Sunday, 30 September 2018 at 07:29:00 UTC, Vijay Nayar wrote:
>>
>> Second question. const class variables may not be re-assigned, 
>> so if you need a variable that may be reassigned, but may 
>> never modify the underlying object, a const pointer can be 
>> useful.  However, it seems that when gets the address of a 
>> class variable, you do not get the underlying address of the 
>> class object.
>
> &a = 0x7ffd0800acb8, a = 0x7fd6b05b0000, a.data=4
> &a = 0x7ffd0800acd0, a = 0x7fd6b05b0000, a.data=4
>
>      The stack ^   the heap^    data on the heap^
> The address of the variable a on the stack has different values 
> across function calls, its value (the reference to the class 
> data) remains the same, as does the data itself.

Is there a way to either have a constant reference to a class 
that can be set to a new value, or is there a way to convert the 
class variable to a class pointer?

For example:

void main()
{
	class Thing {}
	class ThingSaver {
                 // A const(Thing) could not be changed in 
setThing().
		const(Thing)* t;

		void setThing(in Thing thing) {
			t = thing;  // ERROR converting to pointer type!
		}
		const(Thing) getThing() const {
			return *t;
		}
	}
	
	Thing t1 = new Thing();

	ThingSaver saver = new ThingSaver();
	saver.setThing(t1);
	const(Thing) t2 = saver.getThing();
}


More information about the Digitalmars-d-learn mailing list