项目开发过程中发现一个问题,有段代码,一个动态库的cpp代码里不包含头文件中类的空构造空析构实现,就会出现编译出的动态库依赖项少了很多。而添加后则多了好几个依赖项。下面看例子:

 ##a.h
class A{
public:
A(){}
~A(){}
void f();
private:
T1 t1;
T2 t2;
}; ##a.cpp
#include "a.h"
void A::f(){t1=0,t2=0;} ##b.cpp
#include "a.h"
int main(){
A a;
return ;
}

假设代码中的T1、T2都是来自T.so文件。我们的目的是由a.so依赖T.so,而最终的b.cpp生成的可执行文件仅仅依赖a.so即可。这样的需求,是项目开发中很常见,动态库依赖链,清晰简明。但是上面的代码却没有达到目的,因为a.so并没有依赖T.so,而b可执行文件,称之为b.out吧,b.out却需要显式依赖T.so才能编译通过。为什么?当我们尝试把A类的构造和析构写在a.cpp中时,就达到了b.out依赖a.so,a.so依赖T.so的目的。

估计你也发现原因了。t1,t2的实现和a.cpp无关。即使用到了t1,t2,但是作为动态库,运行是在被动态调用时候才运行的,编译期t1,t2来自头文件,不用考虑其实现,故而不需要依赖。而构造函数搬到了cpp中后,构造时候需要对t1,t2实现。

而在项目开发中,这样的情况很常见,代码要更复杂。养成在cpp中实现构造和析构的习惯是有必要的。

最新文章

  1. Python for Infomatics 第14章 数据库和SQL应用一(译)
  2. SVN的感叹号
  3. [UCSD白板题] Least Common Multiple
  4. javadoc错误: 编码gbk的不可映射字符
  5. Spring源码学习(二)AOP
  6. yii1.1.15 accessRules的一个小bug
  7. fstream读写UNICODE文件
  8. ORACLE CASE函数 .
  9. Quartz 2D 概述
  10. JS使用合并数组
  11. Mac下jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限
  12. 表迁移工具的选型-xtrabackup的使用
  13. easyui datagrid 右边框被隐藏
  14. 梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编写一个程序,计算共有多少中不同的走法?
  15. 解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
  16. HTML—标签与表格 、框架
  17. scss文件使用笔记
  18. win7下python2.6如何安装setuptools和pip
  19. NetBeans 8以后版本无法连接git服务器
  20. 不可不知的mysql 常用技巧总结

热门文章

  1. 分享给大家一个500G.Net ftp资料库
  2. 白鹭引擎 - 绘制圆形的进度条 ( graphics )
  3. chattr 改变文件、目录属性 (chmod、passwd等涉及文件修改的命令提示Operation not permitted)
  4. 查找nginx安装的路径
  5. 1037C_ Equalize(字符串)
  6. ETC2 区别于ETC的重要点
  7. Haskell语言学习笔记(80)req
  8. zstack使用笔记之端口转发
  9. HashMap 实现总结
  10. TLS协议工作过程;如何应用TLS/SSL协议为WEB流量提供安全