class NearestNeighbour { private: DistanceBase* _d; public: NearestNeighbour(const DistanceBase& d) { _d = d.clone(); } ~NearestNeighbour() { delete _d; } ... };Note: We must also write explicit operator=() and copy constructors.
Implementation of copy and copy constructor
NearestNeighbour::NearestNeighbour(const NearestNeighbour& n) : _d(NULL) { *this = n; // Uses operator=() } NearestNeighbour& NearestNeighbour::operator=(const NearestNeighbour& nn) { delete _d; _d=NULL; if (nn._d) _d = nn._d->clone(); return *this; }