Ну, если убрать reference в объявлении rc, то результат вас
устраивает? const std::shared_ptr<class Test> getLast()
{
const std::shared_ptr<class Test> rc = q.front();
Ещё мне кажется, что для класса Test необходимо написать перемещающий конструктор. И копирующий конструктор у вас не дописан. У вас напрашивается std::move. Обратите на него внимание.
А к вопросу про очередь, то её следует внутрь класса загнать с mutex q_mx; condition_variable q_cv;.