向类中添加新成员变量是否会影响二进制兼容性?

时间:2017-12-06 12:13:28

标签: c++ c++11

我在共享库中有一个名为AMFactory的类。许多用户应用程序都使用此共享库。现在我想在我的类中添加一个新的私有成员变量。这会破坏二进制兼容性吗?如果它破了,那就是它的黑客攻击。在我的情况下,我不希望重新编译用户应用程序。我的班级[AMFactory]及其基类[工厂]的片段。

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_;
};
}
}

1 个答案:

答案 0 :(得分:1)

  

现在我想在我的类中添加一个新的私有成员变量。这会破坏二进制兼容性吗?

你班级的大小会改变,因此是的,它会打破二元兼容性。

  

如果它破了,那么它就是黑客攻击。就我而言,我不希望重新编译用户应用程序。

不是我所知道的人。这也是(也)为什么我们在开始实施之前专注于设计。