0

オブジェクトを格納するときは常にポインター リストを使用するように教えられましたが、代わりにオブジェクトを含むリストを使用するようになりました。では、リストからオブジェクトを適切に削除するにはどうすればよいのでしょうか?

最初のコード例はポインター リストから削除され、問題なく動作しますが、2 番目のコード例では実行時にエラーが発生します。オブジェクトを含むリストを操作する場合、delete を使用する必要がありますか?

using namespace std;

struct SomeObject{
    SomeObject(int i){
        something=i;
    }
    int something;
};

void main(){



    list<SomeObject*> pointerList;
    SomeObject * op = new SomeObject(2);
    pointerList.push_back(op);

    auto pit = pointerList.begin();
    pointerList.erase(pit);
    delete *pit;

    cout<<(**pit).something<<endl;



    list<SomeObject> objectList;
    SomeObject o(1);
    objectList.push_back(o);

    auto oit = objectList.begin();
    objectList.erase(oit);
    delete &oit;//this one

    cout<<oit->something<<endl;



    int i;
    cin >> i;

}

また、このようにすることの欠点と利点は何ですか?

4

1 に答える 1