smart-pointers

    -1熱度

    1回答

    class A{ public: A():p(nullptr){}; private: std::unique_ptr<B> p; // B is some class }; 當A的對象超出範圍時,將自動刪除佔用內存空間的內存空間,該內存空間消耗的內存空間爲p。 我們是否應該像下面那樣顯式編寫析構函數? ~A(){ delete p;

    1熱度

    1回答

    我正在使用Qt和cpp編寫代碼,其中我創建了一個擁有大量數據的類(比方說,RAM大約100MB)。在這個類的析構函數中,我使用while循環刪除了這些數據。問題是,當我調用刪除這個類的主線程凍結,因爲它在忙於刪除這些數據。 有人告訴我,智能指針是解決方案,因爲它會自動釋放內存,我不必顯式調用刪除,但我懷疑智能指針也會釋放主線程中的內存。 我想知道智能指針所做的刪除是否在主線程中完成? 代碼示例是:

    1熱度

    1回答

    我想通過自己來實現共享PTR模板類。 原型爲混疊的shared_ptr構造是 template< class Y > shared_ptr(const shared_ptr<Y>& r, element_type *ptr); 我已經實現轉換構造如下, shared_ptr<T>::shared_ptr(const shared_ptr<U> &p_ownershipObj,T* p_man

    -1熱度

    1回答

    我只是在C++ 11中編寫了一些小代碼,並且遇到了我無法理解輸出的情況。 對於下面的代碼構造函數只會調用一次而析構函數被多次調用。如果我將刪除[] p與刪除p它的行爲正確,但爲什麼刪除[] p是給這種輸出? #include <iostream> #include <memory> class MyClass{ public: MyClass(){std::cout<<"Cons

    -1熱度

    1回答

    什麼是最習慣的方式來轉換它? std::array<SomeType,SIZE> arr; std::vector<shared_ptr<SomeType>> vec; // <--- want to fill with pointers // to items in arr 第二個問題 - 是否有可能在創建shared_ptr到對象的堆棧分配array?一旦

    0熱度

    1回答

    我試圖創建下圖中顯示的關係。 A正在創建一個B對象作爲共享指針。然後它繼續將共享指針傳遞給一堆D。 但是,當創建B時,它會創建一個C對象,該對象將從A隱藏,並且僅由B知道。儘管C必須知道B才能工作。 由於共享指針已經作出B,有什麼辦法將B的構造函數內的共享指針傳遞給C? 當然,我可以通過將this指針傳遞給C來使其工作,並將其存儲爲原始指針。但是當B被銷燬時會發生什麼?然後C會嘗試刪除B指針,但由

    4熱度

    2回答

    我想持有一個基類實例的向量,無需對象切片(這樣我也可以存儲Base的子實例而沒有問題),同時保持多態行爲而不通過複製值添加到列表中,而是通過引用。 考慮以下源文件: #include <iostream> #include <string> #include <vector> #include <memory> class Entity { public: Entity()

    0熱度

    1回答

    有兩個容器:資源的所有者和非所有者。由於我只有1個擁有者,我想我需要unique_ptr。 class OwnershipContainer { public: void add(std::unique_ptr<Obj> obj) { objects.push_back(std::move(obj)); } Obj* get(std::size_t i)

    1熱度

    1回答

    背景 我一直在寫一的StateMachine其轉換表在運行時加載。每次轉換時採取的操作都以字符串形式存儲。該字符串被轉換爲指向狀態機類的成員函數的std::function對象。當事件發生並導致轉換時,該函數被調用。 問題 我已經成功地使用這種策略之前,決定哪個函數被調用的運行時間。不幸的是,我已經運行到以下錯誤: error: return type 'XStMachine::TrFunc {a

    2熱度

    4回答

    據我所知,std::weak_ptr被用作引用可能已被釋放的std::shared_ptr引用的內存的安全方式。它也可以與std::unique_ptr一起使用嗎?