我正在将一些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资源。
答案 0 :(得分:5)
如果您有一个指针向量,例如std::vector<Object*>
,则Object
析构函数将不被调用。
如果您有一个对象向量,例如std::vector<Object>
,那么您可以存储副本在向量中“放入”的内容。所以我不确定悬挂指针的来源。