C++:Singleton的替换

bit*_*oon 1 c++ singleton class

我经常使用单例,因为我讨厌将主类的对象传递给成员类,以便允许它们访问主类.

Class Foo
{
    A* a;
    B* b;
    C* c;
};
Run Code Online (Sandbox Code Playgroud)

例如,在上面的例子中,如果A,B和C想要访问Foo-我将不得不传递Foo的每一个对象,并将其存储为其成员变量(或在每个函数调用中给出对象).这有效,但感觉不对,需要更多的代码编写.

相反,我可以让Foo成为单身人士(当然只有当只有1个实例时)然后从A,B和C调用Foo :: getInstance() - > ....而且我不需要传递任何对象.我发现这非常方便.

现在,问题是我的情况可能有多个Foo实例.显然我不能使用单身模式.但我不想传递变量,也不想将它们存储在成员类中.代码太多了!:)

举个例子,我讨厌这个:

A::A(Foo* foo) : m_foo(foo)
{

}
Run Code Online (Sandbox Code Playgroud)

还有这个:

void A::someFunc(Foo* foo, int someParam)
{

}
Run Code Online (Sandbox Code Playgroud)

但是,我喜欢这个:

A::A()
{

}

void A::someFunc(int someParam)
{
    Foo* foo = Foo::getInstance();
}
Run Code Online (Sandbox Code Playgroud)

还有其他办法吗?类似于单身人士模式的东西?

Mar*_*k B 7

这种模式正在创建一堆循环引用,这通常是代码气味.您可能希望深入了解您的设计,因为解决这些关系问题的常用方法是创建一个与现有类交互的第三个类.或者,如果你真的需要这种行为,那么传递对包含类的引用有什么问题呢?