refcounting

    1熱度

    1回答

    下面的代碼: <?php function f($b) { echo xdebug_debug_zval('b'); } function g() { echo xdebug_debug_zval('a'); } $a = 10; f($a); f(&$a); g(); echo xdebug_debug_zval('a'); ?> 輸出是: b:

    4熱度

    1回答

    我在擺弄python的ctypes模塊以更好地理解垃圾收集器的工作原理。在翻譯的過程中,我遇到了這種奇怪的情況: >>>import ctypes >>>def get_ref(obj): ... """ This returns the refcount of obj as a c_size_t """ ... return ctypes.c_size_t.from_address(id(

    1熱度

    1回答

    我在C以下的常規,我用它來把字符串數組轉換爲字符串 PyObject* build_pylist(char** strings, unsigned int string_cnt){ PyObject* list = PyList_New(string_cnt); int i; for(i = 0; i < string_cnt; i++){ PyObj

    2熱度

    1回答

    最近我想到了一個狡猾的計劃(TM:P)) 我有我的計劃,以更新設置結構(可以說每15秒)。設置結構由多個函數使用,每個函數都由多個線程調用。 所以我需要一個引用計數器知道什麼時候是安全的釋放舊的設置結構。 那麼這是正確的方法嗎? 請不要回應說,這是確定如果你還沒有仔細閱讀代碼,當涉及到共享指針很容易做這樣的虐待(相信我)時犯錯誤。 編輯:我forgott提及重要的一部分。我認爲這個功能阻止了裁判計

    3熱度

    2回答

    與std::shared_ptr一起工作很多我錯過了shared_ref實施。這是shared_ptr的專業化,它保證,它永遠不會包裝nullptr(當然,正確使用)。 我有點奇怪它爲什麼不在C++ 11標準中。實施它有沒有任何市長問題?在我的頭頂,我想不出任何。 編輯: 我希望有類似的接口: template <typename T> class shared_ref { public:

    2熱度

    1回答

    因此,我已經放在一起Python C擴展,雖然他們各自的行爲已驗證,我想通過一些refcount調試來驗證這一點。 如何確認我已正確插入INC/DEC refcounts?我想從黑匣子的角度來做這個驗證,也就是說,如果所有的refcount都已經正確完成,函數的輸入/輸出/內存應該如何查看? 我的第一種方法是使用sys.getrefcount(obj)並檢查所有輸入/輸出對象的refcounts以

    1熱度

    1回答

    當我將信號連接到回調函數時,回調函數獲取參數。在對象傳遞給我的回調函數之前,reference counter是否增加了,還是我必須自己增加它。 我想這肯定有某種約定,因爲在gtk或libgobject的文檔中沒有提到那樣的東西。

    3熱度

    1回答

    我在嘗試將舊項目轉換爲ARC。我的項目依賴於Cocos2D,它是第三方非ARC庫。所有Cocos2D源文件都是單獨目標的一部分,並被編譯爲靜態庫。 但是,ARC遷移程序在Cocos2D源文件中返回ARC semantic issue錯誤,即使它們不是我試圖轉換的主要目標的一部分。 這可能是什麼原因?那源代碼應該不重要,對嗎?

    7熱度

    2回答

    我想在Java中編寫DagNode類,其中兩個節點在邏輯上相等,如果它們相等作爲參考。 在C++ —的想法(我在C很++)—是使用智能指針和引用計數: 當創建一個節點,我會查找在如果某些表節點已經存在。如果是這樣,我會返回一個指向舊的指針。否則,重新創建一個節點。 重載的C++方法(如複製構造函數和析構函數)將執行參考計數,並且當節點的ref計數降至0時,該節點將從上述表中逐出。 (C++也將釋放

    1熱度

    2回答

    我使用筆尖作爲幾個按鈕的模板。它似乎工作正常,他們每個人都有自己的獨立國家。但是,當我釋放按鈕時,我會在dealloc中崩潰。下面是代碼... mSoundBtns = new cSoundButton*[mNumSounds]; for(unsigned int i = 0 ; i < mNumSounds; ++i) { mSoundBtns[i] = nil; } for(