我在exe和dll中有以下类定义。
// 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类的大小?
答案 0 :(得分:2)
如果更改B类的大小,则应重新编译
如果通过更改C类的大小不改变B的大小,则无需重新编译A.
看来,B不是从C继承的,所以B的大小不会改变。
- 干杯
答案 1 :(得分:2)
每次b.dll的 public 界面发生变化时,你都必须重新编译a.exe(不仅是大小,也是成员重新排序时,私有/公共更改[这也会影响成员排序,没有从源代码中看到],...)。如果C
是公共接口的一部分,那么每次whhn C
更改时都需要重新编译A.exe。如果C
是b.dll的私有类,则无需重新编译a.exe,该文件无法从a.exe引用。另请注意,C
可以间接引用,例如当您的B::funx
是内联函数时,从那时起C的实例化可以在A.exe的代码中进行。
作为一个大拇指,当您使用声明C
替换class C;
的定义,并且仍然可以编译A.exe时,您不需要关心C
。但我宁愿建议每次编译A.exe,因为在将来某个时候代码会发生变化,这样就不会满足这个条件,你将很难调试错误。