我們在共享庫的版本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