c++ - 组合静态成员和方法

标签 c++ logging static-methods static-members

考虑一个具有静态成员和静态方法来设置成员值的类(以下基于 @JamesKanze 的 example ):

class A_EXPORT InA
{
    public:
     static FILE* ourDest;
     static void setDest( FILE& dest );
};

article (on logging) in Dr. Dobbs建议将静态成员和静态方法组合如下:

// in header file
class A_EXPORT InA
{
    public:
     static FILE*& theDest();  // a static member that is a static method too!
};

// in cpp file
FILE*& InA::theDest()
{
    static FILE* pStream = stderr;
    return pStream;
}

// in user's file
InA::theDest()  =  fopen("log.txt","a"); //std::ofstream( "log.txt" );

问题:结合静态成员和静态方法有什么优缺点?

最佳答案

此模式通常称为 Meyer's singleton ,单例设计模式的实现。

主要优点是它能够处理static initialization order fiasco ,这基本上是无法预测跨翻译单元初始化静态对象的顺序。

关于c++ - 组合静态成员和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027333/

相关文章:

c++ - 我应该删除 QDebug header 以进行发布吗?

c++ - 从 stdin 读取时 zmq_poll 不监听信号

java - Log4j2不创建日志文件

python - 我如何记录 IPython 的输出,而不是在每次加载时都显示丑陋的 7 行日志记录信息?

java - 重定向 System.out.println

Java反射方法hashmap

c++ - 声明抽象类型的字段?更喜欢指针还是引用?

c++ - 如何在汇编函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针

需要 C++ 静态方法

java - Java 中的静态方法和接口(interface)