Нет, если a
представляет собой динамически выделенный массив необработанных указателей, delete[] a;
просто удаляет память, занятую массивом необработанных указателей, но not вызывает деструкторы для объектов
.
Итак, если эти исходные указатели являются владеющими указателями , у вас есть leaktrocity :)
Используйте контейнер STL класс с интеллектуальными указателями, например std::vector<std::unique_ptr<X>>
, для более современного и более простого подхода: таким образом вы получаете как исключение-безопасность , так и автоматическое уничтожение как массива указателей, так и объектов, указывающих к.
Один из примеров, который был дан взаймы прямо от этого Аспектно-ориентированное программирование: Радикальное Исследование в Модульном принципе, видео YouTube красило к дисплею. В примере у Вас есть графический редактор, который состоит из точек, форм, и т.д. и когда изменения в тех объектах происходят, необходимо сказать дисплею обновлять себя. Не обрабатывая его в аспекте Вы заканчиваете тем, что повторили себя вполне немного.
AOP, поскольку я понял его, был создан для того, чтобы не повторять себя для сквозных проблем, которые не могли бы иметь никакого отношения к бизнес-логике. С аспектами можно построить эти проблемы из модулей к аспектам. Один из примеров регистрировался, но существует набор разных вещей, которые Вы могли бы закончить тем, что повторили. Это развивалось, с тех пор и это больше не об аспектно-ориентированном программировании, но существует также аспектно-ориентированное моделирование.
[еще 1118] информация об аспектно-ориентированном программировании может быть найдена из этих источников:
Безопасность
, Более дружественная ошибка msgs для asp.net webcontrols/webparts
Производительность
Реализация Шаблона разработки в Java и AspectJ (Hannemann и Kiczales): http://www.cs.ubc.ca/labs/spl/papers/2002/oopsla02-patterns.pdf
бумага показывает, как некоторые шаблоны разработки GoF могут реализованный лучшим способом в Java с помощью AspectJ
Отмена - я называю сторонний блок, который поддерживает операции отмены. Это требует, чтобы вызывающие стороны создали контекст отмены, назвали некоторые методы в блоке, adn тогда уничтожают контекст отмены. Контексты могут быть вложены. Кроме того, если контекст создан, но оставлен в нежелательном состоянии, которое требует перезапуска приложения.
Обычно для использования отмены я записал бы что-то вроде этого
void foo()
{
int id = lib.create_undo_context();
try
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
finally
{
lib.destroy_undo_context(id);
}
}
с PostSharp, я определяю названный атрибут [Отменяют], который создает контекст отмены, когда метод запускает и уничтожает его, когда метод выходит (даже если исключение выдается) - таким образом, код похож на это
[Undo]
void foo()
{
lib.performsomeaction();
lib.performsomeaction();
lib.performsomeaction();
}
, Это немного более сложно для реализации этого, чем я показываю, потому что я имею, гарантируют, что все контексты отмены очищены даже в случаях, где там вкладываются контексты Отмены - но Вы получаете идею.
Проверка:
[NotNull]
public string Property1 { get; set; }
[Length(Min = 10, Max = 20)]
public string Property2 { get; set; }
[Regex(Expression = @"[abc]{2}")]
public string Property3 { get; set; }
Другой классический пример (как вход) кэшируется. Но другие примеры более интересны.
Безопасность - проверяющий, что у пользователей есть соответствующие полномочия до выполнения определенных методов.
У Вас не может быть множественного наследования в Java. Однако при помощи AOP можно было "ограничить" множественное наследование. Попытайтесь погуглить это для наблюдения некоторых примеров.
я также соглашаюсь с Eyvid. Статья Hannemann и Kiczales является замечательной для изучения основ на шаблонах разработки и получении некоторых больших примеров AOP.
Мой фотоальбом использование aspectj для трех вещей:
первое, в особенности было в значительной степени прямым из технический разговор Google о AOP. Это о модульном принципе по-другому, чем большинство людей рассматривает. Определенно рекомендуйте наблюдать что, если Вы интересуетесь тем, как использовать его навсегда.
Общедоступная инвариантная проверка. Так как PostSharp 1.5 будет идти с наследованием аспекта, даже через интерфейсы, это даст много новых возможностей.
Управление транзакциями.
На мой взгляд, вы не хотите, чтобы объекты, которые могут быть частью транзакции, знали, что они находятся в транзакции. Используя AOP, вы можете компоновать объекты в транзакции по мере необходимости, при этом объекты в транзакции не должны знать ни о том, что они находятся в транзакции, ни даже о существовании фреймворка AOP.