是否需要删除保存对象的"对"?

Mr.*_*.OY 3 c++ vector c++11

我做了这样一对

typedef std::pair<int, Dish> OrderPair;
Run Code Online (Sandbox Code Playgroud)

当Dish是一个对象.我有一个OrderPair的矢量:

std::vector<OrderPair> orderList;
Run Code Online (Sandbox Code Playgroud)

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

Bla*_*aze 5

当你OrderPair被删除,那么Dish它的一部分也消失了.当std::vector<OrderPair> orderList超出范围(它被声明的函数的结尾等)时,所有OrderPair内部因此所有内部Dish也消失了.擦除OrderPair使用时erase,那就Dish消失了.

当我不想从内存中删除菜时,擦除功能是否足够?

如果你打电话erase,那么OrderPairDish就是从记忆中消失了.如果那不是你想要的,你需要一个不同的数据结构.例如,如果OrderPair不包含Dish但指针指向Dish,如下所示:

typedef std::pair<int, Dish*> OrderPair;
Run Code Online (Sandbox Code Playgroud)

然后你确实可能erase那对和Dish没有从内存中删除,只是一个引用它.但只有那么小的代码片段,很难知道你的意图.