Нет, это не законно.Вы должны взять копию объекта, то есть использовать
Sample sample = stack.front ()
Если вы используете std::vector
, вызов pop_front
перемещает элементы позади в местоположение, а ваши опорные точки - в другой элемент (ранее второй, теперь первый элемент.)