当前位置:  开发笔记 > 编程语言 > 正文

使用gcc强制实例化对象

如何解决《使用gcc强制实例化对象》经验,为你挑选了1个好方法。

在以下代码中,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.



1> Naveen..:

它不会实例化它们,因为NSP::Admin admin();它不会创建任何对象.

相反,它是函数的函数原型的声明,它返回NSP :: Admin对象并获取void参数.它是那些奇怪的C++语法之一.第二个工作原因是,编译器不会"混淆"认为它是一个函数原型.它可以清楚地看到您正在创建一个对象.

使用默认构造函数创建对象

NSP::Admin            admin;   // (without parenthesis)
NSP::server           server;

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有