第一次自己写有很多个工程的程序,虽然之前研究过一些动态库的相关内容,但是以前只亲手写过使用loadlibrary调用的纯c语言的动态库,没有动态链接过c++的类,因此对dll这东西还是有些恐惧的,所以开始的时候我的工程是由几个LIB工程,几个纯C DLL工程和一个EXE工程组成的(DLL工程也静态链接了LIB工程产生的LIB文件,EXE通过LoadLibrary来调用DLL)。但是编写过程中我逐渐发现了静态库天生的缺陷:
1,静态库里所有在CPP里写的代码会在EXE和DLL中保存多份拷贝。
假如你的LIB库里有这样一个类:
// .h ///
class Singleton
{
public:
static Singleton* instance();
private:
static Singleton* m_Instance;
};
// .cpp ///
Singleton* Singleton::m_Insatnce=0;
Singleton* Singleton::instance()
{
if(m_Instance==0)
{
m_Instance=new Singleton
}
return m_Instance;
}
我称这货为假单例模式,如果你只有一个EXE工程还好说,如果你有其他DLL需要调用该单例模式,这货就露馅了,每个DLL里都会把上面的cpp里的代码复制一份,m_Instance在每个DLL里调用instance的时候都为0,所以每个DLL返回的对象都不是同一个。
除此以外,如果你的LIB里代码比较多的话,每个链接它的DLL的体积都会很庞大