2016-07-16 52 views
-2

我不知道如何使用.top()當我有一堆共享指針時刪除元素。C++堆棧的共享指針刪除元素

我的類(像這樣):

Class 
{ 
public: 
    Class(); 
    ~Class(); 
    void popState(); 

private: 
    std::stack<std::shared_ptr<State> > states; 
} 

void Class::popState() 
{ 
    delete this->states.top(); 
} 

我有錯誤的 「刪除這個 - > states.top()」:表達式必須有一個指針類型。
它應該如何正確書寫?

+7

共享指針(一般來說智能指針的真正意義)的全部意義在於您不必手動刪除任何東西... – Borgleader

回答

3

使用shared_ptr的很大一部分原因是,您不要必須刪除它指向的對象。指向該對象的最後一個shared_ptr的析構函數刪除該對象。因此,從析構函數中刪除delete行。沒有什麼你需要做的。

+1

*指向對象的最後一個shared_ptr或weak_ptr的析構函數會刪除該對象。*錯誤,弱指針是非擁有的參考。 (見[文檔](http://en.cppreference.com/w/cpp/memory/weak_ptr))如果它持有對象的引用,則不必將其轉換爲share_ptr來訪問它,但你做。 – Borgleader

+1

@Borgleader - 修正。太早了。 –

+0

但是,當我想彈出這樣的元素:this-> states.pop()那麼這個共享ptr會自動刪除? – nolbek