首页 > 解决方案 > c++ 类包含一个与自身类型相同的静态成员。为什么是这种模式?

问题描述

我从一位前同事那里继承了一个项目,我发现了这些代码片段(以及 SO questions 中的一些类似的片段:c++ 类是否可以将自身作为同一类中的类的成员和静态成员对象包含在内)

// Service.h
class Service
{
// ...
public:
    static Service sInstance;
    void Somememberfunc();
//...
};

// Service.cpp
#include "Service.h"

Service Service::sInstance;

void Service::Somememberfunc()
{
//...
}

// Main.cpp
#include "Service.h"
void Fun()
{
    Service &instance = Service::sInstance;
    //...
    instance.Somememberfunc();
    //...
}

但是,我没有找到关于何时使用此模式的任何解释。有哪些优点和缺点?

标签: c++classstatic

解决方案


请注意,该成员是静态的,因此它是类的一部分,而不是实例化对象的一部分。这很重要,因为否则您将尝试创建一个递归成员(因为该成员是对象的一部分,它也包含相同的成员等等......),但这里不是这种情况。

描述这一点的最佳模式是:全局变量。静态成员在 main() 之前初始化,并且可以通过包含头文件从程序的任何部分访问。这在实现时非常方便,但程序越复杂,维护的时间越长,就越难处理,所以总体思路是避免这种情况。此外,由于无法控制初始化的顺序,不同全局变量之间的依赖关系可能会导致启动过程中出现问题。


推荐阅读