Тут, если я не ошибаюсь, возвращается указатель на локалный объект, время жизни которого ограничено телом функции, зачем так делать?
Это нормально, что очередь, которая передается, очищается?
А где оператор присваивания?
Можно новый код?