Используйте ::std::auto_ptr
на данный момент, и когда C ++ 0x доступен, затем переключитесь на ::std::unique_ptr
.По крайней мере, в заводском случае, когда вы передаете право собственности вызывающей стороне.
Да ::std::auto_ptr
имеет проблемы и выглядит ужасно.Да, это не рекомендуется в C ++ 0x.Но это рекомендуемый способ сделать это.Я не исследовал ::boost::unique_ptr
, но без семантики перемещения я не вижу, что он может работать лучше, чем ::std::auto_ptr
.
Я предпочитаю идею обновления с помощью поиска и замены, хотя тамЕсть несколько необычных случаев, в которых это не приведет к ожидаемому результату.К счастью, эти случаи приводят к ошибкам компилятора:
::std::auto_ptr<int> p(new int);
::std::auto_ptr<int> p2 = p;
должен будет, по крайней мере, стать таким
::std::unique_ptr<int> p(new int);
::std::unique_ptr<int> p2 = ::std::move(p);
Я предпочитаю поиск и замену, потому что я считаю, что с помощью макросов и typedefs для таких вещей, какэто, как правило, делает вещи более туманными и трудными для понимания позже.Поиск и замена вашей кодовой базы могут применяться выборочно, если это необходимо (::std::auto_ptr
не исчезнет в C ++ 0x, это просто устарело) и оставляет ваш код с ясным и очевидным намерением.
Какдля того, что «обычно» сделано, я не думаю, что проблема существовала достаточно долго, чтобы существовал общепринятый метод обработки перехода.