Мы почти перешли к использованию 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
, нам нужно будет тщательно протестировать наш код, чтобы убедиться, что мы соблюдаем семантику различной собственности.