Вам нужно управление памятью, другого жизнеспособного выбора нет. Однако вам может не потребоваться управление памятью из фабричного метода.
Основной проблемой интеллектуальных указателей является отсутствие ковариации, что является болью при реализации виртуального метода clone
. К сожалению, правило ковариации не ослаблено в C ++ 0x, поэтому оно остается проблемой.
С другой стороны, возвращая необработанный указатель и оставляя его вызывающей стороне, чтобы обернуть его, это открывает дверь к ошибкам (даже если это подход Boost, выбранный для его клонов).
Лично я бы предложил:
- печально известный
auto_ptr
или простой указатель, который вызывающая сторона должна переносить в C ++ 03
- a
unique_ptr
как только ваш компилятор его получит
Последние объединяют большинство преимуществ (оставляя в стороне ковариацию) и практически не снижают производительность.