Вы могли бы хотеть проверить это учебное руководство: http://www.webdesignerwall.com/tutorials/css-decorative-gallery/
В нем писатель использует пустой элемент промежутка для добавления накладывающего изображения. Можно использовать jQuery для введения, сказал, что элементы промежутка, если требуется сохранить код максимально чистым. Пример также дан в вышеупомянутой статье.
Hope это помогает!
-Dave
Вызов
new B();
решает две задачи:
new (xxx) B ()
) Если конструктор throw, вызывается соответствующий оператор delete. Случай, когда соответствующее удаление является оператором размещения, является единственным случаем, когда оператор удаления размещения вызывается без синтаксиса :: operator delete (). delete x;
или delete [] x;
не вызывают операторы удаления размещения, и нет синтаксиса, аналогичного размещению new для их вызова.
Обратите внимание, что в то время как деструктор of B будет не называться, уже созданные подобъекты (члены или B и базовые классы B) будут уничтожены до вызова оператора delete. Не вызываемый конструктор - это конструктор для B.
Когда создается исключение из конструктора, память, выделенная с помощью new, освобождается, но деструктор класса B не вызывается.
В этом случае ваш объект o фактически не создается, а память, выделенная new, освобождается. Таким образом, деструктор не вызывается. Таким образом, вам НЕ нужно вызывать:
delete o;
Интересный шаблон проектирования - RAII - Resource Acquisition Is Initialization. В этом шаблоне вы используете конструктор, чтобы инкапсулировать получение ресурса и освободить ресурс в деструкторе. Если ресурс не может быть получен, вы добавляете конструктор - как в вашем примере. Таким образом, если у вас есть действительный объект, у вас есть ресурс.
Если объект построен, значит, вы успешно получили ресурс. Это означает, что в течение всего срока службы объекта ресурс принадлежит вам. Когда объект удаляется, ресурс освобождается. Если объект никогда не создается, значит, вы никогда не получали ресурс. См. Википедию:
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
Из стандарта C ++ 2003 5.3.4 / 17 - Новое:
Если какая-либо часть описанной выше инициализации объекта завершается выдачей исключения и может быть найдена подходящая функция освобождения, вызывается функция освобождения для освобождения памяти, в которой создавался объект, после чего исключение продолжает распространяться. в контексте нового выражения. Если не удается найти однозначно совпадающую функцию освобождения памяти, распространение исключения не приводит к освобождению памяти объекта. [Примечание: это подходит, когда вызываемая функция распределения не выделяет память; в противном случае это может привести к утечке памяти. ]
Таким образом, утечка может быть, а может и не быть - это зависит от того, удастся ли найти подходящий освободитель (что обычно бывает, если только оператор new / delete не был переопределен). В случае, когда есть подходящий освободитель,