【发布时间】:2020-11-29 20:53:24
【问题描述】:
我想延长 boost::log::core 的生命周期以终止进程。
我知道文档中不建议这样做。但是我尝试使用 Schwarz 计数器作为核心来保留它,直到全局变量的最后一个析构函数使用它。
Core 将共享指针与 Meyer 的单例一起使用。是否可以实现施瓦茨计数器或漂亮的初始化核心?
【问题讨论】:
我想延长 boost::log::core 的生命周期以终止进程。
我知道文档中不建议这样做。但是我尝试使用 Schwarz 计数器作为核心来保留它,直到全局变量的最后一个析构函数使用它。
Core 将共享指针与 Meyer 的单例一起使用。是否可以实现施瓦茨计数器或漂亮的初始化核心?
【问题讨论】:
core::get() 方法向核心返回一个shared_ptr,这就是实现 Schwarz 计数器的方法。您可以在程序的正常操作期间调用此方法(即,当main() 正在执行时)并将该指针保存在保证在终止期间存在的数据结构中。虽然shared_ptr 存在,但您可以通过该指针访问内核(但不一定通过core::get())。
请注意,库提供的所有记录器也在内部保存指向核心的指针。例如,如果您在对象析构函数中执行终止,则将记录器设为该对象的成员,您将能够在销毁期间发出简单的日志记录。
请注意,核心不是库维护的唯一单例,并且其他单例不受此方法的破坏。例如,您不能在程序终止期间使用global loggers。
【讨论】: