Boost logo

Boost :

From: David Abrahams (abrahams_at_[hidden])
Date: 2000-08-26 19:06:16


Hi boost!

I am writing some classes which I plan to allocate out of a special memory
pool, but never destroy (mostly for speed). I am just going to release the
memory pool to clean up. Naturally, these objects must have trivial
destructors. What's the problem? Well, I want to use some boost classes as
bases and sub-objects of my classes. For example:

typedef unsigned long PrimaryCost;
typedef float StructureCost;

struct Cost
    : boost::equality_comparable<
        boost::less_than_comparable<Cost> >
{
    Cost() : primary(), structure() {}

    PrimaryCost primary;
    StructureCost structure;

    bool operator<(const Cost& rhs) const
        { return primary < rhs.primary || primary == rhs.primary &&
structure < rhs.structure; }

    bool operator==(const Cost& rhs) const
        { return primary == rhs.primary && structure == rhs.structure; }
};

Unless I know that equality_comparable and less_than_comparable have trivial
destructors, I can't use them as shown above. I suggest that we begin to pay
attention to this little detail, and when trivial ctors or dtors are present
in a class, we mention it in our documentation pages.

I imagine there must be other similar properties we're ignoring. I wonder
whether one can technically count on std::pair having a trivial dtor?
Thoughts?

Dave


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk