Вы можете безопасно использовать memcpy POD и встроенные типы. Они определены как не имеющие семантики, кроме мешка с памятью.
Типы, которые имеют конструкторы и деструкторы, однако, должны быть построены и уничтожены, чтобы поддерживать инварианты. Хотя вы можете создавать типы, которые могут иметь memcpy'd и иметь конструкторы, это очень сложно выразить в сигнатуре типа. Таким образом, вместо возможного нарушения инвариантов, связанных со всеми типами, которые имеют конструкторы и / или деструкторы, STL допускает ошибки вместо поддержки инвариантов при использовании конструктора копирования при необходимости.
Именно поэтому в C ++ 0x добавлена семантика перемещения через ссылки на rvalue. Это означает, что контейнеры STL могут использовать преимущества типов, которые предоставляют конструктор перемещения и предоставляют компилятору достаточно информации для оптимизации в противном случае дорогостоящей конструкции.