The only method in the bid class that modifies a bid's state is set_portfolio.  So bids are nearly immutable.  If that is the case, then couldn't we just have the AddBid method here take the same arguments as the bid constructor and construct the new bid itself.  Then it could return a pointer to the constructed bid in case the caller wanted to do anything else with it.  Then we could scrap set_portfolio and instead have the portfolio passed as an arg to the bid constructor (or factory static method).