当超出范围时,停止调用d'tors的std :: vector

Jam*_*mes 0 c++ stl

我正在将一些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密集型的.

jua*_*nza 5

如果你有一个指针向量std::vector<Object*>,那么Object析构函数将不会被调用.

如果你有一个对象矢量,例如std::vector<Object>,那么你存储在矢量中"放"的任何副本.所以我不确定悬挂指针的来源.