私はいくつかの Java を C++ に移植していますが、単純にstd::vector
.
これが私の問題です。私はオブジェクトのリポジトリを持っており、後である時点で、このリポジトリから何らかの条件を満たすオブジェクトのリストが必要になります。現在、それらを一時的に読み込んでいますstd::vector
。この一時的なオブジェクトが範囲外になるdelete
と、その内容が失われ、もちろん、リポジトリ内でポインタがぶら下がっていることがわかります。
これは私の現在の「回避策」であり、特に嫌だと思います。
#define NULLIFY(aParam) \
{ \
for (size_t i = 0; i < aParam.size(); i++) { \
aParam[i] = NULL; \
} \
}
typedef std::vector<Object*> TObjectVector;
int main(int argc, char* argv[])
{
PopulateRepository(); // repository uses std::set
TObjectVector subset;
Repository.GetConditionSatisfyingObjects(subset);
DoSomething(subset);
NULLIFY(subset); // Stop destruction of the objects.
}
私は他のアイデアを受け入れます。私は元々、生のポインターと動的割り当てですべて動作していましたが、渡すパラメーターが少なくなるため、STL を使用すると速度が向上するかどうかを確認したかったのです。このプログラムはマルチスレッドであり、かなり CPU を集中的に使用します。