Я бы предложил, чтобы лучшим решением было бы вызвать ошибку в вашем деструкторе, если метод flush()
явно не был вызван.
В этом случае, вероятно, лучше быть явным, и появление ошибки в деструкторе гарантирует, что вы определенно либо вызвали flush()
(или «откат», либо как вы его называете). Вызывая ошибку, вы также получаете действительно личное уведомление о том, что что-то пошло не так, тогда как, если вы просто ничего не делаете, вы можете не заметить этого.