我正在将一些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.
}
Run Code Online (Sandbox Code Playgroud)
我对其他想法持开放态度.我最初使用原始指针和动态分配,但我想看看是否有使用STL的加速,因为我有更少的参数传递.该程序是多线程和CPU密集型的.
如果你有一个指针向量std::vector<Object*>,那么Object析构函数将不会被调用.
如果你有一个对象矢量,例如std::vector<Object>,那么你存储在矢量中"放"的任何副本.所以我不确定悬挂指针的来源.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |