Опыт показывает, что нижние значения, как правило, подвержены ошибкам, легко забываются и, как правило, представляют собой большую ответственность, чем актив. Если вы можете упорядочить свой код таким образом, чтобы ваши объекты не могли быть недействительными, ваш код становится проще, его легче читать, понимать и поддерживать.

ел бы иметь простой способ проверки, чтобы объект был действительным. Я подумал о простой функции преобразования, что-то вроде этого:

operator bool() const { return is_valid; }

Проверить, чтобы он был действительным, было бы очень просто

// is my object invalid?
if (!my_object) std::cerr << "my_object isn't valid" << std::endl;

Это считается хорошей практикой?

Ответы на вопрос(2)

Ваш ответ на вопрос