兼容性如果更改C ++类成员指针类型

时间:2014-05-13 14:06:40

标签: c++ pointers dll linker compatibility

根据KDE-Techbase,不允许更改类成员类型。 但是改变指针的类型是二进制兼容的,不是吗? 例如,在" MyClass.DLL":

class A
{
    int * m;
};

我将其更改为:

class A
{
    B * m;
};

这是有效还是会破坏DLL之间的兼容性? 我是这么认为的,因为指针总是以32/64位存储。

1 个答案:

答案 0 :(得分:0)

标准没有这样的保证,但如果你假设一个特定的平台(例如Windows)你对这个实现有更多的了解:事实上,所有指针(非指针指向成员)都是结构布局的大小和对齐方式相同。

您可以通过查看对象的大小和offsetof各种数据成员来验证特定情况。将旧定义保留为新名称,并添加static_assert(如果您有较旧的编译器,则添加Boost')验证假设。这样,由于调试版本中的自动错误检查或您不了解的问题,您不会被任何有趣的业务所困扰。