2010-10-25 79 views
0

我在exe和dll中有以下类定义。EXE和DLL依赖关系 - 何时重新编译EXE?

// A.exe: 
Class A { void fun() { B* b = new B(); b.funx(); } 

// B.dll: 
Class B { void funx (void) { C* y = new C(); y.funy(); } 
Class C { void funy() { } } 

可以说我改变了B类的大小,我应该重新编译A.exe吗?我应该重新编译A.exe,即使我改变了C类的大小?

回答

2

你有充分的时间来A.EXE重新编译公共接口的B.DLL变化(不仅大小,也当成员重新排序,私有/公共变化[这也影响成员排序,而不能从源代码中看到],...)。如果C是公共接口的一部分,则每次更改时都需要重新编译A.exe。如果C是b.dll的私有类,则无需重新编译a.exe,而无法从a.exe引用它。还要注意,可以间接引用C,例如,当B::funx是内联函数时,因为C的实例化可以在A.exe的代码中进行。

作为一个大拇指之后,当您将C的定义替换为声明class C;,并且仍然可以编译A.exe时,您无需关心C。但我宁愿建议每次编译A.exe,因为在将来的某个时刻代码会发生变化,所以这种情况不会得到满足,您将很难调试错误。

2

如果你改变B类

如果B的大小不会改变由C级的尺寸发生变化,你需要的大小,您应该重新编译不重新编译A.

看来, B不是从C继承的,所以B的大小不会改变。

--Cheers