为了防止类T和shared_ptr的错误使用(通常,从同一个T *构造多个shared_ptrs,导致双重释放)我想到强制共享指针被使用,使类构造函数成为私有,并添加工厂方法来创建shared_ptr。
问题1:这是一个不好的方法,为什么?
我将所有上述功能抽象到这个基类模板中:
#include <memory>
template<typename T>
class add_make_shared : public std::enable_shared_from_this<T>
{
public:
typedef std::shared_ptr<T> Ptr;
template<typename... Args>
static Ptr make_shared(Args&&... args)
{
return Ptr(new T(std::forward<Args>(args)...));
}
};
我也从enable_shared_from_this继承,因为它在这种情况下很有用(尽管根本不需要)。
然后,对于我们想要实施此政策的每个A类,我们必须这样做:
class A : public add_make_shared<A>
{
private:
friend class add_make_shared<A>;
A(...) { ... }
public:
...
};
基本上是:
(前提是您对问题1的回答为否)问题2:此实施是最优的还是如何改进?
由于以上两点,我的口味仍然有点冗长。