raii

    7熱度

    3回答

    假設你有一個類foo,它包裝了一些可調用對象的集合。 foo具有迭代集合並調用每個函數對象的成員函數run()。 foo也有一個成員remove(...),它將從集合中移除可調用的對象。 是否有一個地道,RAII風格的後衛,你可以把foo.run()和foo.remove(...)使得被以foo.run() 調用驅動中移除了將被推遲到後衛的析構函數火災?它可以用標準庫中的東西來完成嗎?這種模式是否

    0熱度

    1回答

    我試圖環繞FILE *類,這裏是 class file_ptr { public: file_ptr(const wstring& _FileN, const wstring& _OpenMode) : file_n(_FileN), omode(_OpenMode), fptr(_wfopen(file_n.c_str(), omode.c_str()))

    0熱度

    1回答

    我修改,並從該post測試程序: #include <unistd.h> #include <pthread.h> #include <iostream> using namespace std; struct Sleepy { ~Sleepy() { cerr<<"...zZzZz..."<<endl; sleep(999); } }

    2熱度

    1回答

    我想實現一個C++類,其目的是實現C風格對象的RAII機制。 然後,我需要能夠將此類的實例傳遞給所有接收提到的C風格對象作爲參數的C風格函數。我知道這應該用unique_ptr解決,但現在我不能使用C++11。無論如何,我想了解如何做到這一點,不管有沒有更好的解決方案。 我有幾個懷疑,關於我必須重載哪些操作員,以及他們之間的差異。 下面是我使用的實現代碼示例。我特別與運營商1和2(有什麼區別?)

    2熱度

    1回答

    我正在編寫Thread_Guard類,如中所述中的併發程序清單2.3 - 使用RAII等待一個線程到完成。 下面是類 class Thread_Guard { thread& gThread; public: Thread_Guard() : gThread(NULL) {}; explicit Thread_Guard(thread& t1) : gThread

    1熱度

    2回答

    可以說我有以下幾點: struct Foo { Foo() : bar([&]{ doSomething();}) std::function<void(void)> bar; void doSomething(){}; } 而且可以說,一個線程調用經常一個Foo實例的杆件,而另一個線程自毀foo的實例。因爲Foo的析構函數被首先調用,所以調用bar會導致無效

    1熱度

    1回答

    我想利用類構造函數和解構函數來通過RAII成語在我的日誌文件中表示和格式化作用域。使用單個#define,它會打印「{」並增加全局縮進級別,以便下一個記錄行將在該縮進級別打印。 LogScopeRAII應該打印「}」並自然減少全局縮進級別,因爲它在Foo()的末尾超出了範圍。但是,我所看到的行爲是LogScopeRAII在構建後立即被解構。 假設:我認爲這個問題是一個正在上分配的RHS創建LogS

    0熱度

    1回答

    我有一個基類可以啓動後臺線程,並在需要時停止它。該線程調用兩個虛擬方法Open()和Close()。所以所有繼承的類都可以重新實現這個方法,但不能啓動/停止線程例程(比示例更困難)。我想遵循RAII原則,並在基類的構造函數/析構函數中啓動/停止線程。 問題是,在構造函數/析構函數中調用虛擬方法是一種不好的做法,在我的情況下不起作用。 這裏是我的問題的出手例如: #include <iostream

    -1熱度

    1回答

    在下列情況下,我的對象超出範圍,我訪問了無效的指針: struct Animal { char* buffer; Animal() { buffer = new char[100]; } ~Animal() { delete[]buffer; } }; int main() { vector<Animal> list; {

    -1熱度

    1回答

    據我所知,有一些在默認情況下傳播到各個領域成員的一些特殊功能。 : - 拷貝賦值,拷貝構造函數,賦值移動,移動的構造函數,析構函數等 class B{}; class C{B b;}; C c1; C c2; c1=c2; //<-- automatic invoke B::operator=() 是否可以部署一些C++技巧創造/模擬有這樣一個很酷的功能自定義函數? 如果沒有,它是一個