Разрешение исключительных ситуаций при проектировании методов класса
Я создаю класс, например, это класс, описывающий связный список, и набор методов по работе с ним (допустим на языке C++). И меня всегда волнует вопрос, на чьи же плечи ложится ответственность за проверку исключительных ситуаций, которые могут возникнуть при вызове методов. Например, мы передаём в метод удаления элемента из связного списка элемент, который не содержится в нём; или же передаём пустой указатель в качестве аргумента метода вставки элемента; . Эти ситуации должны учитываться непосредственно в коде перед вызовом метода или же обрабатываться именно в классе ? Очень часто вижу примеры, где в классе вообще такие ситуации не учитывается. Какая же верная тактика при проектировании класса : учитывать все ситуации в нём или возлагать ответственность по их обработке на пользователя класса ?