Мы почти перешли к использованию boost::shared_ptr во всем нашем коде, однако у нас все еще есть отдельные случаи, когда мы используем std::auto_ptr, включая классы singleton:
template < typename TYPE >
class SharedSingleton
{
public:
static TYPE& Instance()
{
if (_ptrInstance.get() == NULL)
_ptrInstance.reset(new TYPE);
return *_ptrInstance;
}
protected:
SharedSingleton() {};
private:
static std::auto_ptr < TYPE > _ptrInstance;
};
Мне сказали, что есть очень веская причина, почему это не было сделано shared_ptr, но для жизни меня я не могу понять, почему? Я знаю, что auto_ptr в конечном итоге будет отмечен как обесцененный в следующем стандарте, поэтому я бы хотел, чтобы знал, что/как я могу заменить эту реализацию.
Также есть ли какие-либо другие причины, по которым вы могли бы использовать auto_ptr вместо shared_ptr? И вы видите какие-либо проблемы с переходом на shared_ptr в будущем?
Изменить:
- Итак, в ответ на вопрос "могу ли я безопасно заменить
auto_ptrнаshared_ptrв приведенном выше коде", да, да, но я сделаю небольшой удар производительности. - Когда
auto_ptrв конечном итоге будет помечен как обесцененный, и мы перейдем кstd::shared_ptr, нам нужно будет тщательно протестировать наш код, чтобы убедиться, что мы соблюдаем семантику различной собственности.