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)
由于允许客户定义自己的类,他只需将构造函数声明为公共,并且管理器仍然可以正常工作。但是客户端将能够在没有管理器类见证的情况下创建这些类的实例,从而导致框架的不良行为/资源管理。
有办法解决这个问题吗?