Хорошо, теперь я технически отвечал на это миллион раз, но я должен сказать это, потому что это бесконечная дискуссия с Java-программистами.
Извините, но я не согласен, почти все вышеперечисленное. Причина, по которой мы должны тестировать ноль в Java, заключается в том, что Java-программисты не должны знать, как обращаться с памятью.
Я говорю это, потому что у меня большой опыт программирования на C ++, а мы этого не делаем. Другими словами, вам не нужно. И обратите внимание, что в Java, если вы нажмете на висячий указатель, вы получите нормальное исключение; в C ++ это исключение обычно не перехватывается и завершает программу.
Не хотите это сделать? Затем следуйте простым правилам C / C ++.
Не создавайте вещи так легко, думайте , что каждое "новое" может доставить вам массу неприятностей и СЛЕДОВАТЬ этим простым правилам.
Класс должен обращаться к памяти только 3 способами ->
Он может "ИМЕТЬ" учеников, и они будут следовать этим правилам:
- ВСЕ члены "HAS" создаются "новыми" в конструкторе.
- Вы будете закрывать / распределять в деструкторе или эквивалентном закрытии ()
функция в Java для этого же класса и не для других.
Это означает, что вам нужно иметь в виду (как это делает Java), кто является владельцем или родителем каждого ресурса, и уважать это право собственности. Объект удаляется только тем классом, который его создал. Также ->
Некоторые участники будут «ИСПОЛЬЗОВАНЫ», но не будут принадлежать или «ИМЕТЬ». Это «СВОЙ» в другом классе и передаются в качестве аргументов конструктору. Поскольку они принадлежат другому классу, мы НИКОГДА не будем удалять или закрывать это, только родитель может.
Метод в классе может также создавать экземпляры локальных объектов для внутреннего использования, которые НИКОГДА не будут выходить за пределы класса, или они должны были быть обычными объектами "has".
Наконец, чтобы все это заработало, вам нужно иметь дисциплинированный дизайн с классами в иерархической форме и без циклов.
При таком дизайне И следуя приведенным выше правилам, нет никакого способа, чтобы дочерний класс в иерархическом проекте когда-либо обращался к уничтоженному указателю, потому что это означает, что родительский объект был уничтожен перед дочерним, что является иерархическим ациклическим дизайн не позволит.
Наконец, помните, что при запуске вашей системы вы должны строить сверху вниз по иерархии и уничтожать снизу вверх. У вас никогда не будет нулевого указателя, или кто-то нарушает правила.