Сообщение Re: Порядок создания и удаления в графе от 27.12.2019 22:38
Изменено 27.12.2019 22:42 rg45
Re: Порядок создания и удаления в графе
Здравствуйте, SuhanovSergey, Вы писали:
SS>Между объектами есть отношение зависимости. A зависит от B. B должен быть создан до A и жить дольше A. A имеет ссылку на B, возможно отягощённую владением. Граф зависимости всех объектов формирует DAG.
SS>Вопрос, как организовать код так, чтобы компилятор проверял, что объекты создаются в топологическом порядке, и удаляются соотвественно в обратном, так что никто никогда не имеет протухших ссылок?
SS>Желательно зависимость выражать как аргумент конструктора. Порядок созданния внутри одного скопа выражается естественным образом
SS>Но порядок удаления легко поломать поменяв порядок членов в A.
Я что-то не совсем понял, зависимость между какими объектами мы рассматриваем. Начинал ты с A и В, потом перешел на B и C.
Хотя, лично я не вижу проблемы ни там, ни там. Правильная последовательность создания/удаления A и B обеспечивается конструктором и деструктором класса A: А не может быть создан раньше B и удален раньше тоже не может быть. От изменения порядка членов b_ и c_ здесь тоже ничего страшного произойти не должно. Ведь B не владеет C, а значит и в деструкоре у него, по идее, не должно возникать никакого интереса, жив ли еще C или уже нет.
Ну а вообще, зависимости между объектами, конечно же, существуют на практике и правильная последовательность создания/удаления обычно достигается продуманным дизайном объектной модели.
SS>Между объектами есть отношение зависимости. A зависит от B. B должен быть создан до A и жить дольше A. A имеет ссылку на B, возможно отягощённую владением. Граф зависимости всех объектов формирует DAG.
SS>Вопрос, как организовать код так, чтобы компилятор проверял, что объекты создаются в топологическом порядке, и удаляются соотвественно в обратном, так что никто никогда не имеет протухших ссылок?
SS>Желательно зависимость выражать как аргумент конструктора. Порядок созданния внутри одного скопа выражается естественным образом
ccode | |
SS>
| |
SS>Но порядок удаления легко поломать поменяв порядок членов в A.
Я что-то не совсем понял, зависимость между какими объектами мы рассматриваем. Начинал ты с A и В, потом перешел на B и C.
Хотя, лично я не вижу проблемы ни там, ни там. Правильная последовательность создания/удаления A и B обеспечивается конструктором и деструктором класса A: А не может быть создан раньше B и удален раньше тоже не может быть. От изменения порядка членов b_ и c_ здесь тоже ничего страшного произойти не должно. Ведь B не владеет C, а значит и в деструкоре у него, по идее, не должно возникать никакого интереса, жив ли еще C или уже нет.
Ну а вообще, зависимости между объектами, конечно же, существуют на практике и правильная последовательность создания/удаления обычно достигается продуманным дизайном объектной модели.
Re: Порядок создания и удаления в графе
Здравствуйте, SuhanovSergey, Вы писали:
SS>Между объектами есть отношение зависимости. A зависит от B. B должен быть создан до A и жить дольше A. A имеет ссылку на B, возможно отягощённую владением. Граф зависимости всех объектов формирует DAG.
SS>Вопрос, как организовать код так, чтобы компилятор проверял, что объекты создаются в топологическом порядке, и удаляются соотвественно в обратном, так что никто никогда не имеет протухших ссылок?
SS>Желательно зависимость выражать как аргумент конструктора. Порядок созданния внутри одного скопа выражается естественным образом
SS>Но порядок удаления легко поломать поменяв порядок членов в A.
Я что-то не совсем понял, зависимость между какими объектами мы рассматриваем. Начинал ты с A и В, потом перешел на B и C.
Хотя, лично я не вижу проблемы ни там, ни там. Правильная последовательность создания/удаления A и B обеспечивается конструктором и деструктором класса A и монопольным владением. От изменения порядка членов b_ и c_ также ничего страшного произойти не должно. Ведь B не владеет C, а значит и в деструкоре у него, по идее, не должно возникать никакого интереса, жив ли еще C или уже нет.
Ну а вообще, зависимости между объектами, конечно же, существуют на практике и правильная последовательность создания/удаления обычно достигается продуманным дизайном объектной модели.
SS>Между объектами есть отношение зависимости. A зависит от B. B должен быть создан до A и жить дольше A. A имеет ссылку на B, возможно отягощённую владением. Граф зависимости всех объектов формирует DAG.
SS>Вопрос, как организовать код так, чтобы компилятор проверял, что объекты создаются в топологическом порядке, и удаляются соотвественно в обратном, так что никто никогда не имеет протухших ссылок?
SS>Желательно зависимость выражать как аргумент конструктора. Порядок созданния внутри одного скопа выражается естественным образом
ccode | |
SS>
| |
SS>Но порядок удаления легко поломать поменяв порядок членов в A.
Я что-то не совсем понял, зависимость между какими объектами мы рассматриваем. Начинал ты с A и В, потом перешел на B и C.
Хотя, лично я не вижу проблемы ни там, ни там. Правильная последовательность создания/удаления A и B обеспечивается конструктором и деструктором класса A и монопольным владением. От изменения порядка членов b_ и c_ также ничего страшного произойти не должно. Ведь B не владеет C, а значит и в деструкоре у него, по идее, не должно возникать никакого интереса, жив ли еще C или уже нет.
Ну а вообще, зависимости между объектами, конечно же, существуют на практике и правильная последовательность создания/удаления обычно достигается продуманным дизайном объектной модели.