仅在 Manager 类中创建对象

Sta*_*tan 5 c++ templates design-patterns

我想创建一个管理器类来管理一种类型的所有创建的对象。当然,这个类也应该创建这些对象。因此,客户端不允许自己创建对象,而必须始终使用管理器类来创建对象。此外,客户可以定义自己的类,这些类将由一名经理管理。

template<class Type>
class Manager{
  //...
  Type* createInstance(){
    Type* ptr = new Type();
    //do sommething
    return ptr;
  }
};
Run Code Online (Sandbox Code Playgroud)

问题是:如何将实例的创建仅限于管理器类?

一种可能是将构造函数声明为私有,并将 Manager 类声明为友元类:

class A{
  friend class Manager<A>;
private:
  A(){}
  ~A(){}   
};
Run Code Online (Sandbox Code Playgroud)

由于允许客户定义自己的类,他只需将构造函数声明为公共,并且管理器仍然可以正常工作。但是客户端将能够在没有管理器类见证的情况下创建这些类的实例,从而导致框架的不良行为/资源管理。

有办法解决这个问题吗?

Hor*_*ing 1

您可以使用密钥模式的某些变体来实现此目的:

http://coliru.stacked-crooked.com/a/257860767a74a15e