ref/unref應該返回什麼值
引用計數是追蹤物件生命週期最常用的方法,一方面保證物件在有人使用時不會被銷毀,另外一方面又保證不會因為忘記銷毀物件而造成記憶體洩漏。具有引用計數功能的物件一般都會提供兩個函式:ref用於增加引用計數,unref用於減少引用計數,計數為0時銷毀物件。
乙個有趣的問題是,這兩個函式應該返回什麼值呢?
我們先看看gobject:
gpointer g_object_ref (gpointer
object
);void
g_object_unref (gpointer
object
);我們再看看dbus:
busconnections
*bus_connections_ref (busconnections
*connections);
void
bus_connections_unref (busconnections
*connections);
ref函式返回物件本 身,unref函式沒有返回值,這個大家似乎已經達成共識了。ref函式返回物件本身使得呼叫很方便,可以在賦值的同時增加引用計數。unref函式沒有 返回值,在大多數情況下沒有問題。直到最近遇到乙個小麻煩,我才覺得unref沒有返回值是不妥當的。
busconnections結構是在connection.c中定義的,refcount是私有變數,外部呼叫者無法訪問。為了知道busconnections物件的引用計數何時變為0了,我只好在外面再加乙個引用計數,這樣不但看起來不倫不類,使用起來也不方便。
refcount作為public變數自然是不合適的,再加乙個get_refcount的函式又比較麻煩。怎麼辦好呢?最簡單的辦法是由unref返回refcount。這樣在使用和實現時都很方便,從語義上說也是合符情理的。
~~end~~
ref unref應該返回什麼值
ref unref應該返回什麼值 引用計數是追蹤物件生命週期最常用的方法,一方面保證物件在有人使用時不會被銷毀,另外一方面又保證不會因為忘記銷毀物件而造成記憶體洩漏。具有引用計數功能的物件一般都會提供兩個函式 ref用於增加引用計數,unref用於減少引用計數,計數為0時銷毀物件。乙個有趣的問題是,...
為什麼 HANDLE 返回值不同
如果你注意各種返回 handle 值的函式,你會發現它們有些返回 null 如 createthread 而有些則返回 invalid handle value 如 createfile 你不得不查詢文件找出每種函式在失敗時返回什麼。為什麼返回值不統一?如你所猜測,是歷史原因。這些值是用於相容16位...
為什麼建構函式沒有返回值?
意見 1 我認為建構函式隱含的返回值就是this,因為建構函式是在類的物件產生時自動呼叫。建構函式被呼叫也就意味著產生了乙個物件,而this指標是與物件實體相關聯的,所以我認為它返回的就是this。舉例如下 class a a aa 此語句導致類a的建構函式a 被自動呼叫返回乙個首位址,系統就在記憶...