Здравствуйте!
Мой вопрос - очень похож на вопрос, озвученный в этой теме.
Правда среда разработки другая, но это не принципиально.
Помогите разобраться.
Есть класс "Компания" (TCompany). Этот класс содержит ссылки на класс "Банковский счет" (TAccount).
У одной компании может быть несколько банковских счетов.
Хотелось бы так реализовать эти классы, чтобы можно было написать вот такой код, использующий эти классы.
Допустим, есть две формы: первая отображает информацию о компании, вторая — отображает информацию о счете.
Хотелось бы, чтобы в этих формах можно было написать вот такой код:
В первой форме:
Код: Выделить всё
ShowInfoAboutCompany (TCompany pCompany)
{
TextCompany = "Название компании: " + pCompany.Name;
lAcc = pCompany.Account; // просто ссылка на счет
TextAcc = "Номер счета: " + lAcc.Number;
}
Во второй форме:
Код: Выделить всё
ShowInfoAboutAccount (TAccount pAccount)
{
TextAcc = "Номер счета: " + pAccount.Number;
TextCompany = "Счет принадлежит компании: " + pAccount.Company.Name;
}
То есть, чтобы можно было:
1) из объекта-компании получить счета этой компании
2) а по объекту-счету получить компанию, которой "принадлежит" этот счет
Как лучше реализовать классы TCompany, TAccount, чтобы этот "клиентский" код работал?
Можно это реализовать "в лоб":
Код: Выделить всё
class TCompany
{
TAccount[10] Accounts;
}
class TAccount
{
TCompany Company;
}
И в конструкторе TCompany создавать нужное количество Accounts и передавать им ссылки на себя.
Но так наверно будет не правильно: будут циклические ссылки объектов друг на друга.
И они никогда не уничтожатся.
Так как используемый нами язык программирования для освобождения памяти имеет только простой сборщик мусора, который освобождает память объекта при уничтожении последней ссылки на объект.
Вручную управлять памятью — нет возможности.
Как правильно сделать?
Помогите пожалуйста разобраться — у меня опыта маловато.