Мое основное правило дизайна UI состоит в том, чтобы иметь каждую "страницу", делают одну задачу и одну задачу только. Это сохраняет страницы простыми, который содержит дизайн в чистоте и подает более понятную заявку.
Этот тип дизайна называют Индуктивным Пользовательским интерфейсом. Вот документ , который Microsoft произвела в 2001 по теме. Текст может быть немного датирован, но принципы являются обычно симпатичной пользой. Единственный протест состоит в том, что существует баланс, который будет найден в разработке как это. Если Вы упрощаете слишком много, пользователи должны будут перейти повсеместно для выполнения простых задач, и усиления в понятности будут потеряны underproductivity.
Есть гораздо больше типов ошибок, чем просто утечки. В порядке от худшего к лучшему:
Данные сохраняются в области, где их не должно быть. Это приводит к тому, что большинство проблем безопасности и , безусловно, труднее всего отследить.
X
, сохраняется в элемент массива зарезервирован для базового типа X
, а размер X
больше, чем размер его базы. Циклические ссылки являются обычным явлением, и они не решаются с помощью std :: auto_ptr
или boost :: shared_ptr
В вашем списке нет замены (2), которая использует ваш мозг.
Ошибка, сделанная людьми, слишком знакомыми с автоматической сборкой мусора (с помощью смарт-указателей):
class A {
public:
int avery_useful_calculation()const { return 4; }
private:
// class shouldn't be instantiated as an automatic variable (on stack)
virtual ~A(){}
};
// client code: needs a very useful calculation
int i = (new A)->avery_useful_calculation();
Возможно, я вышел за рамки, но у меня были странные ошибки при попытке «удалить» неинициализированные указатели.
Чтобы «избежать» утечки памяти, я использую структуру try {} __finally {}
, если она реализована (но я где-то читал, что может быть неэффективно, если исключение было вызвано во вспомогательном вызове)