c++ - 向类中添加新成员变量会影响二进制兼容性吗?

标签 c++ c++11

<分区>

我在共享库中有一个名为 AMFactory 的类。这个共享库被许多用户应用程序使用。现在我想在我的类中添加一个新的私有(private)成员变量。这会破坏二进制兼容性吗?如果它坏了,那么它有破解方法吗?就我而言,我不希望重新编译用户应用程序。下面是我的类 [AMFactory] ​​及其基类 [Factory] ​​的片段。

namespace CF {
class CF_EXPORT Factory {
 public:
 virtual ~Factory();

 virtual bool registerManager(const std::string &_interface,
                      const Id_t &_id) = 0;
 virtual bool unregisterManager(const std::string &_interface,
                      const Id_t &_id) = 0;
};
}
namespace CF {
namespace AM {
class AMFactory : public CF::Factory {
public:
CF_EXPORT static std::shared_ptr<AMFactory> get();

CF_EXPORT AMFactory();
CF_EXPORT virtual ~AMFactory();

CF_EXPORT bool registerManager(const std::string &_interface,
                      const Id_t &_id);
CF_EXPORT bool unregisterManager(const std::string &_interface,
                      const Id_t &_id);

private:
CF_EXPORT bool registerManager(std::shared_ptr<AMManager>);
CF_EXPORT bool unregisterManager(std::shared_ptr<AMManager>);

static std::shared_ptr<AMFactory> theFactory;
ServicesMap services_;
};
}
}

最佳答案

Now I want to add a new private member variable to my class. Does this break the binary compatibility?

类的大小会改变,因此是的,它会破坏二进制兼容性。

If it breaks then is there a hack for it. In my case I don't want the user applications to be recompiled.

不是我所知道的。这也是我们在开始实现之前关注设计的原因。

关于c++ - 向类中添加新成员变量会影响二进制兼容性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47674066/

相关文章:

c++ - 默认与推导的模板参数?

c++ - 在 C++11 中的 std::thread 退出时自动调用函数

c++ - 在 C++ 中,循环值不会在循环外更新

c++ - 什么是 C++ 的最佳开放 XML 解析器?

c++ - 如果我需要每秒读取文件 0...5 次,是否值得保持文件描述符打开?

c++ - 当类型和参数长度可能不同时,如何将 'function with parameters' 作为参数传递?

c++ - 为什么 std::unique_ptr 没有 const get 方法?

简单排序示例中的 C++ 段错误

c++ - 将非虚拟接口(interface)和多级继承结合在一起

c++ - 声明一个继承final的类