Graphics properties as objects

John W. Eaton jwe at bevo.che.wisc.edu
Tue Jan 8 09:55:54 CST 2008


On  8-Jan-2008, Michael Goffioul wrote:

| On 1/8/08, John W. Eaton <jwe at bevo.che.wisc.edu> wrote:
| > On  8-Jan-2008, Michael Goffioul wrote:
| >
| > | On 1/8/08, John W. Eaton <jwe at bevo.che.wisc.edu> wrote:
| > |
| > | > I'm surprised to see the property argument above not be a reference or
| > | > pointer.  Doesn't this cause a copy to be made when insert_property is
| > | > called?
| > |
| > | It just increases the reference counting of the underlying base_property
| > | object.
| >
| > But won't the count be decremented again when the destructor for the
| > local value in the insert_property function is called when the end of
| > the function is reached?
| 
| Yes, but in the meantime, you'll have another reference stored in the
| map. So the internal object will not be deleted.

OK, then why not pass by reference to avoid the unnecessary calls to
the copy constructor and destructor?

Other than that, my initial impression is that the proposal is good
and keeps most of the details hidden from the user.  It seems the only
thing to really know is that there are some requirements for to the
pointer to the base_property object that is passed to the property
constructor:

  * if persist is true, then the pointer must be valid for as long as
    the map exists and it is the caller's responsibility to delete the
    object that the pointer refers to

  * if persiste is false, then the pointer should point to an object
    that has been allocated with new and the object will be deleted
    when the map is deleted

Is that correct?  If so, I think these rules should be stated in a
comment in the code.

jwe


More information about the Octave-maintainers mailing list