nitpicking: IMHO a plain pointer is unnecessary and prone to memory bugs. An embedded object ` BaseProduct base_product;` and `base_product.empty()` / `.clear()` instead of `base_product == NULL` / `= NULL` would be better.