There is, in fact the front() method returns a reference. I purposefully forced a copy here because the I need to return the Sam object to the user later on. 

However you make a good point that I am making a copy into the queue and another copy out of  the queue. I will think about a clean way to simply hold a pointer to it in the Queue without deleting the original object. Any suggestions?

Should be said that there are very very few supplementary alignments in a BAM anyway, so this queue is very rarely used.