单例模式有两点需要注意:
定义于头文件 <mutex>
template< class Callable, class... Args > void call_once( std::once_flag& flag, Callable&& f, Args&&... args ); (C++11 起) 准确执行一次可调用 (Callable) 对象 f ,即使同时从多个线程调用。
即使在从多个线程调用时,也保证函数局部静态对象的初始化仅出现一次,这可能比使用
std::call_once
的等价代码更为高效。
利用了局部静态对象的析构函数释放内存。
用static关键字修饰的局部变量叫静态局部变量,它存储在静态存储区,生命期贯穿整个程序运行期间。
1、全局对象,程序一开始,其构造函数就先被执行(比程序进入点更早);程序即将结束前其析构函数将被执行。
2、局部对象,当对象生成时,其构造函数被执行;当程序流程将离开该对象的声明周期时,其析构函数被执行。
3 、静态(static)对象,当对象生成时其构造函数被执行;当程序将结束时其析构函数才被执行,但比全局对象的析构函数早一步执行。
4、以new方式产生出来的局部对象,当对象生成时其构造函数被执行,析构函数则在对象被delete时执行时执行
g++ -std=c++11 -o singleton main.cpp -lpthread