In the wider world, this is known as 'cloning'.
 
Just to complicate things you can have both shallow and deep cloning.
 
A shallow clone will create a copy of an object along with copies of all it's 'value' properties (things like strings, integers, etc.), but will only copy references to any contained objects (so two shallow clones would refer to the same instance of a third object).
 
A deep clone will create a copy of an object along with copies of all it's value properties, but will also recursively clone any contained objects (so deep cloning an object which has a reference to another object will result in 4 objects - each of the two parent objects will have it's own instance of the child object).
 
Google is your friend, and will provide you with a multitude of references.
 
Peter's right with the reference to Delphi's way of doing simple cloning using Assign.
 
Having a 'copy constructor' is another way of doing the same thing.  You write a constructor for your class which has one parameter - another instance of the same class.  Inside your constructor you simply copy all the values over from the parameter object to the new object you're constructing.
 
HTH,
 
Conor
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
 
I want to copy the state (variables) of one instance object of a class, to another instance object of the same class. Eg. Class TDog, instance Dog1 and Dog2. I could do the following:

Dog2.Colour := Dog1.Colour;

Dog2.Breed := Dog1.Breed;    etc.

But this seems a little silly. How do I do this in OO?

 

If knowing more would be helpful, here's what I'm doing:

 

I'm using ICS to connect to an smtp server and want to make multiple connections so that I can offload 4000 emails as quickly as possible, leaving the smtp server to send them out. (No I'm not a spammer, this is a report - email with pdf attachment).

 

I've just run a test and I can paste multiple ICS components on my form i.e. SmtpCli1, SmtpCli2, SmtpCli3, etc. And I can assign my email details into SmtpCli1 as my "holder' object. When I go to send, I see if SmptCli2 is in a ready state - if so, I copy all of the details from SmtpCli1 to SmtpCli2 and send via Cli2. Else, I try SmtpCli3, etc. Using this method, and keeping 5 sessions active, I found it sped up my job 5 fold - so seems worth it.

 

So this all works but it's very manual with lots of code. How do I do this with OO elegance?

Reply via email to