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

时间:2012-08-12 22:22:32

标签: 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.
}

我对其他想法持开放态度。我最初使用原始指针和动态分配,但我想看看是否有使用STL的加速,因为我有更少的参数传递。该程序是多线程的,并且占用大量CPU资源。

1 个答案:

答案 0 :(得分:5)

如果您有一个指针向量,例如std::vector<Object*>,则Object析构函数将被调用。

如果您有一个对象向量,例如std::vector<Object>,那么您可以存储副本在向量中“放入”的内容。所以我不确定悬挂指针的来源。