我正在将一些 Java 移植到 C++,并且天真地开始使用 std::vector
。
这是我的问题。我有一个对象存储库,稍后我会需要
此存储库中满足某些条件的对象列表。目前我正在将它们读入一个临时的 std::vector
。事实证明,当这个临时文件超出范围时
它会删除
它的内容,当然这会导致存储库中出现悬空指针。
这是我目前的“解决方法”,我觉得特别恶心。
#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。
最佳答案
如果您有一个指针 vector ,例如 std::vector<Object*>
, Object
析构函数不会被调用。
如果你有一个对象 vector ,比如 std::vector<Object>
,然后你存储任何被“放入” vector 中的拷贝。所以我不确定悬挂指针可能来自哪里。
关于c++ - 在超出范围时停止 std::vector 调用 d'tors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11926313/