﻿# V6115\. Not all Closeable members are released inside the 'close' method\.

Анализатор обнаружил в классе, реализующем интерфейс 'Closeable' \(или 'AutoCloseable'\), поля \(ресурсы\), которые также реализуют этот интерфейс, но не освобождаются в методе 'close' анализируемого класса\.

```cpp
сlass A implements Closeable {

  private FileWriter resource;
 
  public A(String name) {
    resource = new FileWriter(name); 
  }

  public void close() {
    // Не освобождается resource
  }
}
```

В данном примере поле 'resource' было инициализировано, но внутри класса 'A' не было вызова 'close' для этого поля\. Отсутствие вызова метода закрытия приводит к тому, что ресурс не будет освобожден, даже когда для объекта класса 'A' был вызван метод 'close'\. Из\-за этого может произойти нарушение логики работы программы\. Например, если ресурс не будет освобожден, то из\-за этого не получится получить доступ к нему из другой части кода\. 

Такая ошибка может сохраниться, даже если в одном из методов происходит закрытие ресурса:

```cpp
сlass A implements Closeable {

  private FileWriter resource;

  public A(String name) {
    resource = new FileWriter(name); 
  }

  public void endWrite() {
    resource.close();
  }

  public void close() {
    // Не освобождается resource и не вызывается метод endWrite 
  }
}
```

Исправить подобную ситуацию можно несколькими способами\. Одним из них является освобождение ресурса внутри метода 'close' анализируемого класса:

```cpp
сlass A implements Closeable {

  private FileWriter resource;

  public A(String name) {
    resource = new FileWriter(name); 
  }

  public void close() {
    resource.close();
  }
}
```

Другой вариант исправления — добавление вызова метода, в котором происходит закрытие ресурса в метод close:

```cpp
сlass A implements Closeable {

  private FileWriter resource;

  public A(String name) {
    resource = new FileWriter(name); 
  }

  public void endWrite() {
    resource.close();
  }

  public void close() {
    endWrite(); 
  }
}
```