强制执行仅用作共享指针的类

时间:2017-01-27 16:59:52

标签: c++11

为了防止类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:
    ...
};

基本上是:

  • 将add_make_shared声明为朋友,因为它需要构建A
  • 声明A的构造函数私有

(前提是您对问题1的回答为否)问题2:此实施是最优的还是如何改进?

由于以上两点,我的口味仍然有点冗长。

0 个答案:

没有答案