我们在共享库的版本1的结构体,我们需要保持的ABI:维护ABI:添加构造函数结构
struct Person
{
std::string first_name;
std::string last_name;
}
在第2次修订,我们正在改变人到这一点:
class Person
{
public:
Person(const std::string &f, const std::string &l);
std::string first_name;
std::string last_name;
}
为了保持源代码兼容性,我们想改变人的逆转1,使代码编译反对新的头文件将运行和代码重新编译不能运行。
我们可以用两个新的非内联的构造函数如下:
class Person
{
public:
Person();
Person(const std::string &f, const std::string &l);
std::string first_name;
std::string last_name;
}
我们正在做的这一切都与G ++。在使用nm查看生成的共享库时,我没有看到普通结构的构造函数或析构函数,所以我猜测那些没有重新编译的代码只会像前面那样在调用站点构造Person。任何重新编译的代码都将使用无参数构造函数。
我看到的唯一问题是,如果我们需要回滚到没有构造函数的共享库的较旧版本,那么编译的任何代码都会中断,但我并不担心这种情况。
更多关于“不是好地方” – 2010-08-05 22:38:07