在以下代码中,gcc不实例化NSP :: Admin和NSP :: Server对象.它只是跳过它们.
int main(int argc, char **argv) { // Here we bootstrap google logging // we also install the signal handler google::InitGoogleLogging(argv[0]); google::InstallFailureSignalHandler(); // now we parse the arguments with gflags google::ParseCommandLineFlags(&argc, &argv, true); NSP::Admin admin(); NSP::server server(); DLOG(INFO) << "boost io_service run"; NSP::IOService::getIOService().run(); }
如果我向CTORS添加一个参数,它们就会被实例化.示例:
NSP::Admin admin(1); NSP::server server(1);
我不能用gdb打破它们,并且跳过它们.这两个对象使用boost io服务注册自己,并在其CTORS中调用方法.
NSP是项目命名空间.
在FreeBSD,glog,gflags和boost asio上使用gcc4.2.
它不会实例化它们,因为NSP::Admin admin();
它不会创建任何对象.
相反,它是函数的函数原型的声明,它返回NSP :: Admin对象并获取void参数.它是那些奇怪的C++语法之一.第二个工作原因是,编译器不会"混淆"认为它是一个函数原型.它可以清楚地看到您正在创建一个对象.
使用默认构造函数创建对象
NSP::Admin admin; // (without parenthesis) NSP::server server;