多個so中模板單例的多次例項化

2022-03-19 15:34:25 字數 740 閱讀 7273

在android打包專案時,發現登入功能不能使用了,logcat中也沒發現什麼問題,最後一行一行log定位到了問題。原來是乙個so檔案中的建構函式被初始化二次!

這個單例是通過繼承模板來實現的(暫時不考慮執行緒安全的問題)

class csinglet

return ms_pobject;

}static

void create()

}static

void destroy()

}static t * get()

static

void reset()

protected:

static t * ms_pobject;

};template

t * csinglet::ms_pobject = null;

遊戲主線程中是直接呼叫instance()方法,之後又通過.so中的乙個靜態方法來呼叫instance(),實際上的結果是直接呼叫跟通過靜態方法呼叫,會初始化二次單例物件

目前暫時的處理方法是,主線程中通過呼叫.so的靜態方法,在該靜態方法中呼叫instance的方法,這樣就只會產生乙個例項物件了。這裡暫時沒涉及到多執行緒程的問題,所以也沒有加上執行緒安全的全碼

通過靜態方法,然後再呼叫例項物件,這確實是乙個很糟糕的方法,為了遊戲能跑,暫時這樣處理了。

參考:動態庫之間單例模式出現多個例項(linux)

c++中模板單例的跨so(dll)問題:rtti,typeid,static,單例

模板化的單例實現

在系統的 中,我們有許多單例。從 cegui 的 中的找到乙個基於模板的類,具體 改變後如下 ifndef singleton h define singleton h include include template class singleton singleton static t insta...

Swift中定義單例的方法例項

什麼是單例 單例模式是設計模式中最簡單的一種,甚至有些模式大師都不稱其為模式,稱其為一種實現技巧,因為設計模式講究物件之間的關係的抽象,而單例模式只有自己乙個物件。單例模式 singleton pattern 也叫單子模式,是一種常用的軟體設計模式。在應用這個模式時,單例物件的類必須保證只有乙個例項...

單例模式中的唯一例項(靜態)

為什麼單例模式中的唯一例項必須是靜態的?單例模式實現程 首先該類建構函式私化 目禁止其程式建立該類象 其本類自定義象 既禁止其程式建立該類象要自建立供程式使用否則類沒用更單例 提供訪問類自定義象類員 外提供該象訪問式 直白講能用該類其建立象通該類自身提供訪問類自定義象 問題關鍵程式呼叫類兩種式 建立...