4

delete *the_object_iterator;すべてのオブジェクトに対して実行する STL ユーティリティ/アルゴリズムはありますか? clear()無事に行けるように?STL コンテナは でset、オブジェクトは で作成された C++ クラスへのポインタnewです。

ブーストが最適なソリューションのようです。私の目標は、コピー不可能なクラスでのコピー構築を避けることでした。

4

3 に答える 3

16

スマート ポインターを使用してクラス ポインターを保持する

std::set<std::unique_ptr<MyClass> > mySet;
于 2011-09-29T20:26:16.623 に答える
10

私の知る限り、すべてのオブジェクトを削除する標準アルゴリズムはありません。ただし、簡単に作成できます。

template< typename T > invoke_delete( T* ptr ){ delete ptr; }

std::for_each( set.begin(), set.end(), &invoke_delete< set_value_type > );
于 2011-09-29T20:26:28.743 に答える
7

ブースト ポインター コンテナーが最適です。

動的に割り当てられたオブジェクトを格納するだけではありません。ただし、オブジェクトは参照としてアクセスできるため、オブジェクトで標準アルゴリズムを使用するのがはるかに簡単になります。

boost::ptr_set<MyClass>   setData;

setData.insert(new MyClass);
于 2011-09-29T20:45:46.900 に答える