【发布时间】:2010-11-16 16:14:01
【问题描述】:
我们几乎已经在所有代码中转而使用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 最终会在下一个标准中被标记为已弃用,所以我想知道我可以用什么/如何替换这个实现。
另外,还有什么其他原因可以让您考虑使用auto_ptr 而不是shared_ptr?您认为将来迁移到 shared_ptr 有什么问题吗?
编辑:
- 因此,在回答“我可以在上面的代码中安全地将
auto_ptr替换为shared_ptr吗”时,答案是肯定的 - 但是我的性能会受到一点影响。 - 当
auto_ptr最终被标记为折旧并且我们转移到std::shared_ptr时,我们需要彻底测试我们的代码以确保我们遵守不同的所有权语义。
【问题讨论】:
-
auto_ptr 正在被替换,主要是因为它处理移动语义的方式,因为在这种情况下,保持向后兼容性比更新它更干净。不过,新类应该*crosses finger*几乎是一个替代品。
标签: c++ stl boost shared-ptr auto-ptr