c++ - 在超出范围时停止 std::vector 调用 d'tors

标签 c++ stl

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

相关文章:

c++ - 如何从 boost::multiprecision::cpp_int 转换为 cpp_dec_float<0>(而不是 cpp_dec_float_50 等)?

c++ - C/C++ 运行时库和 C/C++ 标准库的区别

c++ - 如何确定 STL 容器中的最后一个有效元素

c++ - 关于我项目中的抽象类

c++ - 如何修复 “No such file or directory”库错误?我正在使用Mingw-w64编译器和Netbeans IDE

STL 中使用的 C++ 自定义比较类型(函数谓词与 less 结构)

c++ - 重载用户定义类型的全局交换

c++ - 如何在 map 中使用结构作为关键

c++ - 为什么以这种方式使用迭代器有效?

c++ - 如何通过 Rcpp 在 C++ 中使用 Boost 库