Скопируйте конструктор создания мусорных объектов

Мой учитель дал мне 2 класса, один - паспорт, а другой - свидание.
date содержит 3 атрибута (строковый день, строковый месяц, строковый год), геттеры, сеттеры и 2 конструктора, один из которых является конструктором копирования:

 public date(date dt)
 this.day=dt.getd();
 this.month=dt.getm();
 this.yaer=dt.gety();

Класс паспорта содержит 2 атрибута (имя строки, дата exp(из класса даты)), и есть такая конструкция:

public passport(string name, date exp)   
this.name=name;  
this.exp= new date(exp);    

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

3 ответа

Дополнительное решение:

в основном классе:

passport[] arr = new passport[100];   // we have 100 passports
date d1= new date ()                  //null date
for (int i=0,i<100,i++)               // we have 100 passports
{ d1.setd();                          //our setter asks for an input
  d1.setm();
  d1.sety();
  arr [i]=new passport (string name, d1); }

как я могу преодолеть этот мусорный объект?

Если date экземпляры изменчивы, а вы нет; ты делаешь то, что делаешь.

если date экземпляры являются неизменяемыми (их состояние не может быть изменено после того, как они были созданы), тогда вы просто используете данный экземпляр, а не создаете новый:

public passport(string name, date exp)   
    this.name = name;  
    this.exp = exp;
}

Вы бы не хотели этого делать, если exp может быть изменено, потому что это будет создавать перекрестные разговоры между passport экземпляр и все, что прошло exp к этому.

как я могу преодолеть этот мусорный объект?

Пусть сборщик мусора делает свое дело: как Date переменная передается в качестве параметра Passport конструктор будет находиться за пределами контекста выполнения, лежащего в основе Date объект будет иметь право быть собранным.

Самый простой способ сделать это - не назначать Date объект к переменной.
Просто включите его экземпляр в Passport вызов конструктора:

Passport passport = new Passport(name, new Date(day, month, year));
Другие вопросы по тегам