From: David B. Held (dheld_at_[hidden])
Date: 2003-02-14 16:56:40
"Philippe A. Bouchard" <philippeb_at_[hidden]> wrote in message
> David B. Held wrote:
> > unsigned Count_;
> > char Value_[sizeof(T)];
> > };
> Another little thing...
> Value_ will have to be aligned just like an object of type T.
;) On my platform, the Count_ variable will ensure this alignment. I
don't pretend that this code is particularly portable. Also, my
platform doesn't have any alignment requirements anyway. ;)
> Wouldn't it be possible to derive TCounted_Record<T> from
> TRecord<T>, removing Value_ at the same time?
No, I don't want to do that derivation, because sometimes I will only
have a record ID to store. If I derive from the actual record type, the
c'tor will need to default construct the record, and then I'll have to
populate it later, which is wasteful (and expensive, if I never actually
need the full record). This way, I can store just the ID. Consider this
struct TLocation : public Record
typedef boost::intrusive_ptr<TCountedRecord<TLocation> > PLocation;
struct TEmployee : public TRecord
typedef boost::intrusive_ptr<TCountedRecord<TEmployee> > PEmployee;
Now, like I explained in the serial_ptr post, in my design, the server
only returns a list of record id's. That way, if I already have some of
the records cached (from previous queries), I don't have to send all
the data over the wire again. In that case, I don't want to store an
entire default record, because even the default c'tor called many
times is going to be slower than the default c'tor for a simple TRecord.
Since performing queries can be a frequent operation with large
result sets, it's important to avoid unnecessary operations.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk