2016-07-16 3 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(); 
} 

私は "this-> states.topを()削除" でエラーが発生しています。
正しく書き込む方法は?

+7

スマートポインタの全体的なポイントは、実際にはスマートポインタのものなので、手動で削除する必要はありません。 – Borgleader

答えて

3

shared_ptrを使用する理由の大部分は、ではありません。は、それが指すオブジェクトを削除する必要があります。オブジェクトを指す最後のshared_ptrのデストラクタがオブジェクトを削除します。だから、delete行をデストラクタから削除してください。あなたがする必要があることは何もありません。

+1

*オブジェクトを指す最後のshared_ptrまたはweak_ptrのデストラクタがオブジェクトを削除します。*間違っています。弱ポインタ​​は非所有参照です。 ([doc](http://en.cppreference.com/w/cpp/memory/weak_ptr)参照)オブジェクトへの参照を保持していれば、それをアクセスするためにshare_ptrに変換する必要はありませんが、あなたがやる。 – Borgleader

+1

@Borgleader - 修正済み。朝早すぎる。 –

+0

しかし、私はこのようにこの要素をポップしたいとき:this-> states.pop()そして、この共有されたptrは自動的に削除されますか? – nolbek

関連する問題