我们几乎已经boost::shared_ptr
在所有代码中都使用了,但是我们仍然有一些孤立的情况使用std::auto_ptr
,包括单例类:
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
最终会在下一个标准中被标记为折旧,所以我想知道我可以用什么/如何替换这个实现。
另外,还有什么其他原因可以让您考虑使用 anauto_ptr
而不是 ashared_ptr
吗?您是否看到将来迁移到 shared_ptr 有任何问题?
编辑:
- 因此,在回答“我可以在上面的代码中安全地替换
auto_ptr
为shared_ptr
”时,答案是肯定的 - 但是我会受到一点性能影响。 - 当
auto_ptr
最终被标记为折旧并且我们转移到时std::shared_ptr
,我们需要彻底测试我们的代码以确保我们遵守不同的所有权语义。