これでデータが正しく解放されるかどうかを知りたいだけです。
擬似コード:
std::map<std::string, ClassPointer*>::iterator tempIterator;
for(tempIterator = directory.begin(); tempIterator < directory.end;
tempIterator++)
delete &tempIterator;
これでデータが正しく解放されるかどうかを知りたいだけです。
擬似コード:
std::map<std::string, ClassPointer*>::iterator tempIterator;
for(tempIterator = directory.begin(); tempIterator < directory.end;
tempIterator++)
delete &tempIterator;
ディレクトリには生のポインターが格納されるため、必要に応じてこれらのポインターを削除するのはユーザーの責任です。
std::map<std::string, ClassPointer*>::iterator tempIterator;
for(tempIterator = directory.begin(); tempIterator < directory.end();
tempIterator++)
{
delete tempIterator->second;
}
常に、より良い解決策は、STL コンテナーでスマート ポインターを使用することです。
std::map<std::string, std::shared_ptr<ClassPointer>> directory;
ClassPointer*
が割り当てられている場合new[]
、このコードは正しく機能しない可能性があります。代わりにスマートポインタを使用することをお勧めします。
そして参考までに、それは
for (auto tempIterator = directory.begin(); tempIterator != directory.end();
++tempIterator)
正しい方法は次のとおりです。
for (
std::map<std::string, ClassPointer*>::iterator it = directory.begin()
, last = directory.end() // avoid call to end() every time
; it != last // use operator != (NOT operator <)
; ++it // prefer prefix increment for iterators!
) delete it->second; // iterator points to std::pair actually!
または C++11 の方法:
for (auto& item : directory) delete item.second;
ところで、これはクラス ポインタのみを解放し、マップ要素は解放しません! (マップ内のポインターは無効になりましたが、アイテムはマップ内に残ります)