今天在头文件里定义了static boost::asio::io_service G_IO_SERV;做全局变量,同时有几个用到这个全局变量的函数包含了这个头文件,在
程序执行时,这个头文件被包含了几次就会调用几次构造函数,跟了下发现这几个生成的变量地址都不同(这个结论用屁股想也能想出来,肯定不同)。加了#ifndef也不行
查书,发现static全局变量的有效域是本文件,定义最好还是放cpp里,头文件里只是声明,所以应该如下定义:
GlobalVar.h
extern boost::asio::io_service G_IO_SERV;
///
GlobalVar.cpp
boost::asio::io_service G_IO_SERV;
程序执行时,这个头文件被包含了几次就会调用几次构造函数,跟了下发现这几个生成的变量地址都不同(这个结论用屁股想也能想出来,肯定不同)。加了#ifndef也不行
查书,发现static全局变量的有效域是本文件,定义最好还是放cpp里,头文件里只是声明,所以应该如下定义:
GlobalVar.h
extern boost::asio::io_service G_IO_SERV;
///
GlobalVar.cpp
boost::asio::io_service G_IO_SERV;