我正在将一些 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。