Oops. Where my speech recognition software wrote "teen reference", it should read "dereference".
----- Original Message ---- From: Sid Maskit <[EMAIL PROTECTED]> To: flexcoders@yahoogroups.com Sent: Wednesday, July 16, 2008 7:50:07 PM Subject: Re: [flexcoders] Array reference vs values It has been a while since I worked in C++, but I am pretty sure that you are incorrect about references. If I remember correctly, C++ has a distinction between pointers and references where a pointer points at a specific memory address, but a reference is an alias for another variable, and that variable might or might not itself be a pointer. The actual value of a pointer is a memory address, but the value of a reference is the value of whatever variable it refers to. In order to get the value of the object at the memory address, one has to teen reference the pointer. These differences occur because pointers and references used different mechanisms. Like most, maybe all, more recent languages, ActionScript has references, but not pointers. A reference is simply an alias which gives one access to some object. It is sort of like a telephone connection to the object: i.e. you can use it to set or get the value of the object; but hanging up the phone only breaks the connection, it does not make the object go away. You never have access to memory addresses. When an object has no references to it, it becomes eligible for garbage collection. There is no way to determine when an object will in fact be garbage collected. Applying this to the system you are describing, things look like this. (For simplicity, I will only deal with one of your dates.) var person:Person = new Person(); Assuming that you are not assigning default values in your class, at this point person.breakfast is null. person.breakfast = new Date(); Now person.breakfast refers to the newly created date object: i.e. the date object now has one reference to it. timeArr[1] = person.breakfast; Now timeArr[1] refers to the same date object as does person.breakfast: i.e. the date object now has two references to it. You could now access the date object by using either reference, and each of them would give you the same information, and the same ability to manipulate the date object. However, setting a reference to null, or to a different object, is essentially hanging up the telephone, and dialing a new number. This will connect the variable you are using to that new object, but has no effect on other variables referring to the previous object. timeArr[1] = null; Now timeArr[1] no longer refers to anything, but person.breakfast continues to refer to the original date object. Perhaps the key detail here is that what we have is to variables that refer to the same object, but those variables have no relationship with one another. This is one of the fundamental aspects of how object-oriented programming works. I would not say that one could not have a system where having two variables refer to the same object would put them into a relationship with one another, but only that that would be a very different system from the one we have. Having said that, I would say that you are going to need to have a way of directly accessing your person object if you want to set one or more of its properties to null. ----- Original Message ---- From: Darren Houle <[EMAIL PROTECTED] com> To: [EMAIL PROTECTED] ups.com Sent: Wednesday, July 16, 2008 6:55:33 PM Subject: RE: [flexcoders] Array reference vs values Josh Yes, what you're describing is exactly what I described and is, in fact, what it happening... but to say I don't ever need to do this? Well... yes... I need to do this... and it has nothing to do with the garbage collector. Here, let me explain in another way.... I have a custom object... lets say it's a Person object. It has various properties, but several are Date types. These are all consecutive, like a workflow, and I want to be able to address them in order via an array... like this... var person : Person = new Person(); person.wakeup = new Date(); person.breakfast = new Date(); person.lunch = new Date(); person.dinner = null; person.bedtime = null; var timeArr : Array = new Array(); timeArr[0] = person.wakeup; timeArr[1] = person.breakfast; timeArr[2] = person.lunch; timeArr[3] = person.dinner; timeArr[4] = person.bedtime; Then some other code figures out where we are in the flow of the day's events... var status : int; if (some criteria) { event = 2; } But I determine lunch hasn't actually happened yet, so it shouldn't have a Date yet. I need to blank out this value that was previously set in the Person object... if (some criteria) { timeArr[event] = null; } But since these references don't seem to propogate backwards, nulling one of the array elements doesn't affect the original property. That's the *whole purpose* of reference vs value... a reference is a pointer to memory space... so if I null that memory space it should affect all the vars pointing to that memory space. Does that make more sense? Darren ________________________________ To: [EMAIL PROTECTED] ups.com From: [EMAIL PROTECTED] com Date: Thu, 17 Jul 2008 11:30:29 +1000 Subject: Re: [flexcoders] Array reference vs values When you do this: var date:Date = new Date(); You're creating an instance of Date and a reference to it named "date". When you do this: var ref:Date = arr[0] as Date; You're creating another reference to the same instance, this time your reference is named "ref". So when you set ref = null, you're making "ref" point to nothing. "date" and "arr[0]" remain unchanged. You don't need to, nor can you remove the date instance created above. That's the job of the garbage collector. -Josh On Thu, Jul 17, 2008 at 11:25 AM, Darren Houle <[EMAIL PROTECTED] com> wrote: This might be a basic AS question, but I encountered it building a Flex app, so... I create a Date var date:Date = new Date(); I create an Array var arr:Array = new Array(); I set the first element of the array equal to the date arr[0] = date; I create another date variable that refers to the first array element var ref:Date = arr[0] as Date; if I trace("date= "+date+", arr[0]="+arr[ 0]+", ref="+ref) I get date=Wed Jul 16 21:04:45 GMT-0400 2008, arr[0]=Wed Jul 16 21:04:45 GMT-0400 2008, ref=Wed Jul 16 21:04:45 GMT-0400 2008 Now I null out the ref variable ref=null; Since AS uses references instead of values I would expect to null out the original date, but no... If I trace("date= "+date+", arr[0]="+arr[ 0]+", ref="+ref) I now get date=Wed Jul 16 21:04:45 GMT-0400 2008, arr[0]=Wed Jul 16 21:04:45 GMT-0400 2008, ref=null I thought everything was a reference in AS? Shouldn't nulling ref also null arr[0] which would null out date? Ultimately.. . I have a custom object that has several fields each containing a Date. I create an array and make each element in the array = each Date in the custom obj. I need to be able to null an array element and have it carry backwards into the object and null out the original Date. Any ideas? Am I missing something really obvious? ------------ --------- --------- ------ -- Flexcoders Mailing List FAQ: http://groups. yahoo.com/ group/flexcoders /files/flexcoder sFAQ.txt Search Archives: http://www.mail- archive.com/ flexcoders% 40yahoogroups. comYahoo! Groups Links -- "Therefore, send not to know For whom the bell tolls. It tolls for thee." :: Josh 'G-Funk' McDonald :: 0437 221 380 :: [EMAIL PROTECTED] com