C++ Nifty Counter idiom是一种利用静态变量和函数的方式来保证静态初始化和静态析构的方法。以下是一个示例:
// foo.h
#ifndef FOO_H
#define FOO_H
class Foo {
public:
Foo();
~Foo();
void doSomething();
};
#endif // FOO_H
// foo.cpp
#include "foo.h"
namespace {
// Define a static Foo object
Foo static_foo;
}
Foo::Foo() {
// Initialization code here
}
Foo::~Foo() {
// Deinitialization code here
}
void Foo::doSomething() {
// Do something here
}
// main.cpp
#include "foo.h"
int main() {
// Use Foo object
static_foo.doSomething();
return 0;
}
在上面的示例中,Foo类有一个默认构造函数和一个析构函数。为了保证静态初始化和静态析构,我们在foo.cpp文件中定义了一个匿名命名空间,并在其中定义了一个静态的Foo对象static_foo。这使得static_foo的构造函数将在程序启动时自动调用,从而保证了静态初始化。同样,当程序退出时,static_foo的析构函数也将被调用,从而保证了静态析构。main.cpp文件中使用了静态Foo对象的成员函数doSomething()。