0

我正在将一些 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。

4

1 回答 1

5

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

如果您有一个对象向量,例如std::vector<Object>,那么您将存储“放入”向量中的任何内容的副本。所以我不确定悬空指针来自哪里。

于 2012-08-12T22:23:58.383 回答