我正在開發一個項目,該項目應該能夠在運行時通過dlopen
加載動態鏈接庫。使用動態鏈接庫管理堆
核心框架已經完成,它的確運轉良好,但我對如何正確管理庫中分配給堆的對象有一些懷疑。圖書館的接口有它返回一個指向庫內部靜態分配的對象,它是一類常見的有virtual
方法亞型只有一個方法
來解釋它更好,我會提供我多麼希望存根它的工作原理:
// header common to the core and to the libraries
class BaseSetting {
..
}
class DerivedSetting1 : public BaseSetting { .. }
class DerivedSetting2 : public BaseSetting { .. }
class ObjectInterface {
private:
vector<BaseSetting*> settings;
protected:
void registerSetting(Setting *setting) { settings.push_back(setting); }
public:
vector<Setting*> *getSettings() { return &settings; }
}
// library example
class ConcreteObject {
ConcreteObject() {
registerSetting(new ..);
registerSetting(new ..);
}
static ConcreteObject object;
extern "C" ConcreteObject *retrieve() { return &object; }
這裏的主要問題是我應該如何管理庫的堆分配設置?我需要多態性,所以我不能只存儲矢量內的具體對象,同時我需要在需要時通過卸載當前庫,並釋放與它們關聯的所有內存來在庫之間切換。我可以使用unique_ptr
,但是這會讓事情變得複雜,因爲我只能通過get()
獲得原始指針,然後破壞任何所有權,從而可以使用它們。
是否有共同的設計模式來處理這種情況?