我做了一个这样的一对
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/