我像这样配对了
typedef std::pair<int, Dish> OrderPair;
当Dish是对象时。 我得到了OrderPair的向量:
std::vector<OrderPair> orderList;
假设我要从向量中删除一对,当我不想从内存中删除碟子时,擦除功能是否足够?我认为答案是肯定的,因为创建对不位于堆中,因此不需要释放任何内存。请告诉我我是否错。
答案 0 :(得分:5)
当您的OrderPair
被删除时,作为其一部分的Dish
也将消失。当std::vector<OrderPair> orderList
超出范围(在函数的末尾声明等等)时,其中的所有OrderPair
以及其中的所有Dish
也将消失。当您使用OrderPair
擦除erase
时,Dish
就消失了。
当我不想删除碟子时,擦除功能就足够了 从内存中获取?
如果您呼叫erase
,则该OrderPair
和Dish
将从内存中消失。如果这不是您想要的,则需要一个不同的数据结构。例如,如果OrderPair
不包含Dish
而是指向Dish
的指针,则如下所示:
typedef std::pair<int, Dish*> OrderPair;
然后,您确实可以erase
配对,并且Dish
不会从内存中删除,只需对其进行引用即可。但是,仅凭这小段代码,就很难知道您的意图。
答案 1 :(得分:3)
只有使用new或malloc动态显式分配的对象才需要使用delete或free显式删除。堆内存用于动态分配。
在您的情况下,您将Dish对象本身推入该对,而不是指向动态分配的指针。
>typedef std::pair <int, Dish> OrderPair;
因此,Dish对象的范围绑定到对对象的范围。当使用擦除方法擦除向量中的对时,该对以及Dish对象也将被破坏。