C++ C+中的单例问题+;

C++ C+中的单例问题+;,c++,singleton,C++,Singleton,目前,我面临着一个与单例类相关的问题。下面是场景:我有3个单例类,即 class BaseConfiguration : public TSingleton<BaseConfiguration>{ }; class ComponentConfiguration : public BaseConfiguration, public TSingleton<ComponentConfiguration>{ }; class ComposedConfiguration : p

目前,我面临着一个与单例类相关的问题。下面是场景:我有3个单例类,即

class BaseConfiguration : public TSingleton<BaseConfiguration>{
};

class ComponentConfiguration : public BaseConfiguration, public TSingleton<ComponentConfiguration>{
};

class ComposedConfiguration : public BaseConfiguration, public TSingleton<ComposedConfiguration >{
};
class BaseConfiguration:公共Qingleton{
};
类组件配置:公共BaseConfiguration、公共TSingleton{
};
类ComposedConfiguration:公共BaseConfiguration、公共TSingleton{
};
ComponentConfiguration和ComponentConfiguration应该初始化BaseConfiguration,因为它们都使用BaseConfiguration。BaseConfiguration也可以初始化为自己的配置

ComposedConfiguration * InitializeComposed()
{
  TSingleton<BaseConfiguration>::CreateInstance();
  return TSingleton<ComposedConfiguration >::CreateInstance();
}

ComponentConfiguration* InitializeComponent()
{
  TSingleton<BaseConfiguration>::CreateInstance();
  return TSingleton<ComponentConfiguration>::CreateInstance();
}

BaseConfiguration * InitializeBaseConfig()
{
 return TSingleton<BaseConfiguration>::CreateInstance();
}
ComposedConfiguration*InitializeComposed()
{
TSingleton::CreateInstance();
返回TSingleton::CreateInstance();
}
ComponentConfiguration*初始化Component()
{
TSingleton::CreateInstance();
返回TSingleton::CreateInstance();
}
BaseConfiguration*InitializeBaseConfig()
{
返回TSingleton::CreateInstance();
}
组合和组件配置是独立的

问题是如何销毁BaseConfiguration的实例。组合和组件配置都可能使用基本配置的实例,例如:在销毁组合时,如果我在析构函数中销毁基本配置,组件配置将崩溃。还可能使用InitializeBaseConfig函数初始化BaseConfiguration。 删除BaseConfiguration实例或调用TSingleton::DestroyInstance()以避免模块崩溃和内存泄漏的最佳方法是什么


谢谢

我的第一个建议是不要继承
基本配置
。这些都是单例,因此变相的是静态变量和方法,所以继承几乎没有什么好处。如果希望在其他单例中从
BaseConfiguration
提供相同的方法,请编写简单的包装,如:

some_type SomeMethod() { 
    return TSingleton<BaseConfiguration>::Instance()->SomeMethod();
}
some_type SomeMethod(){
返回TSingleton::Instance()->SomeMethod();
}
除非有几十个,否则这不是问题


我的另一个建议是完全放弃单身模式。定期上课。然后,它们的对象可以具有规则的生命周期。如果你真的不需要超过一个,那很好,只是不要分配超过一个。在这种情况下,如果您愿意,您可以从一些
BaseConfig
继承,并且不会有任何特殊之处。您还可以避免继承,让两个配置对象将
std::shared_ptr
保留为
BaseConfig
对象,如果你想避免在两个配置对象中有两个代码> BaseFig Gug < /Cord>子对象。

这与我熟悉的C++单模式模式有很大的不同。为什么不使用Scott Meyer的Singleton?static Singleton&instance(){static Singleton s;return s;}我可以从中获取有关Scott Meyer的Singleton的信息的任何链接