This is a memory allocation issue that I\'ve never really understood.
void unleashMonkeyFish() { MonkeyFish * monkey_fish = new MonkeyFish(); std::string
As a simple rule of thumb store your data as a copy within a class, and pass and return data by (const) reference, use reference counting pointers wherever possible.
I'm not so concerned about copying a few 1000s bytes of string data, until such time that the profiler says it is a significant cost. OTOH I do care that the data structures that hold several 10s of MBs of data don't get copied.