我有一个项目,我想更多地使用智能指针。总的来说,我在这个目标上是成功的。但是,我遇到了一件我不确定“最佳实践”是什么的事情。
基本上我想从一个函数返回一个“指针”,但要求用户将它保存在一个智能指针中。不仅如此,我不想强制使用特定的智能指针(共享与作用域)。
问题主要在于似乎没有正确的方法将 a 升级scoped_ptr
到 a shared_ptr
(我认为这将是理想的解决方案)。我理解他们为什么不这样做,因为它会允许转让所有权,这可能会导致一些类似的问题std::auto_ptr
。
但是,在这种情况下,转让所有权似乎是一个好主意。所以我的想法是这样的:
// contrived example of factory pattern
std::auto_ptr<A> func() { return std::auto_ptr<A>(new A); }
这可以“正常”工作,因为两者都scoped_ptr
具有shared_ptr
从 a 获取所有权的构造函数std::auto_ptr
。
所以我的问题是,这是好的做法吗?有更好的解决方案吗?我能想到的唯一真正的选择是使用模板模板作为返回值,如下所示:
// similar to above example
template <template <typename> class P>
P<A> func() { return P<A>(new A); }
这实际上可以很好地工作,只是我认为它需要一些工作才能让它与 a 一起工作scoped_ptr
。
想法?