std::auto_ptr
не работает в VC ++ 8 (это то, что мы используем на работе). Мой главный недостаток в том, что он допускает auto_ptr<T> x = new T();
, что, конечно, приводит к ужасным сбоям, и в то же время просто сделать по ошибке.
От ответа до другого вопроса здесь на stackoverflow:
Обратите внимание, что реализация std :: auto_ptr в Visual Studio 2005 ужасно нарушена.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98871
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101842
Я хочу использовать
boost::scoped_ptr
, для указателей, которые не должны переходить в собственность.
boost::shared_ptr
, для указателей в контейнерах и в других местах, где они требуются.
std::auto_ptr
, для указателей, которые должны / могут передать право собственности.
Но так как std::auto_ptr
сломан для меня, я думаю, что будет лучшим подходом:
- Заменить
std::auto_ptr
чем-то из сети. Как этот этот один от Рани Шарони (еще не пробовал).
- Используйте взамен
boost::shared_ptr
. Будет, конечно, работать, хотя будут некоторые незначительные накладные расходы, которые меня не волнуют. Но я хочу использовать auto_ptr
для обозначения цели указателя. (См. этот ответ для голосования по этому подходу.)
- Мне никогда не понадобится передавать право владения на практике, поэтому мне не стоит об этом беспокоиться.
Обновление:
Вот что я сделал:
Я скопировал вышеупомянутую реализацию auto_ptr Рани Шарони. Отсюда .
Несколько небольших тестов:
class T
{
public:
T() {
OutputDebugStringA("T\n");
};
~T() {
OutputDebugStringA("~T\n");
};
};
{
fix::auto_ptr<T> x(new T); // This just works.
}
{
fix::auto_ptr<T> x = (new T); // Doesn't compile. Great!
}
{
fix::auto_ptr<T> x = fix::auto_ptr<T>(new T); // Transfer of ownership works also.
}
Конечно, эти тесты ни в коем случае не являются исчерпывающими, и вы не должны им доверять. Внедрение исключительного безопасного шаблонного класса - дело волосатое. По крайней мере, это работает лучше, чем встроенный.
Примечание: я не знаю, разрешено ли мне использовать эту реализацию в отношении авторского права. Я написал Рани по электронной почте, и я жду ответа. Я обновлю этот пост, когда узнаю больше.
Каждому разрешено использовать реализацию auto_ptr Рани Шарони по вашему желанию.
Спасибо за все ваши ответы.