c++ - 是否需要删除包含对象的 "pair"?

标签 c++ c++11 vector

我做了一个这样的一对

typedef std::pair<int, Dish> OrderPair;

当 Dish 是一个对象时。 我得到了一个 OrderPair vector :

std::vector<OrderPair> orderList;

假设我想从 vector 中删除一对,当我不想从内存中删除盘子时,删除功能是否足够?我认为答案是肯定的,因为创建一对不在堆中,因此我不需要释放任何内存。如果我错了,请告诉我。

最佳答案

当您的 OrderPair被删除,然后是 Dish那是它的一部分也不见了。当std::vector<OrderPair> orderList超出范围(声明函数的结尾等)然后所有 OrderPair在所有 Dish 内那里也不见了。当你删除 OrderPair使用 erase , 那么 Dish没了。

does erase function is enough when I don't want to delete the dish from memory?

如果您调用 erase , 那么 OrderPair因此 Dish从内存中消失了。如果那不是你想要的,你需要一个不同的数据结构。例如如果 OrderPair不包含 Dish而是指向 Dish 的指针,像这样:

typedef std::pair<int, Dish*> OrderPair;

那么你确实可以erase那对和Dish并没有从内存中删除,只是对它的引用。但是仅凭那一小段代码,就很难知道您的意图。

关于c++ - 是否需要删除包含对象的 "pair"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151633/

相关文章:

c++ - 是否有更惯用的方式来拆分 std::vector?

c++ - 使用模板对字符串 vector 进行排序

c++ - 提供错误值的 vector 迭代器

c++ - 在另一个 vector 包含的 vector 中创建一个对象

未在范围内声明的 C++ 转换仅发生在服务器上

c++ - 带有 gcc 和 windres 的版本信息 .EXE

c++ - 为什么 (c++)*(c++) 在 C++ 中是未定义的行为?

c++ - 如何判断我的线程池何时完成其任务?

c++ - 有两个不同版本的箭头运算符?

C++递归帮助