是否需要删除包含对象的"pair"?
does a "pair" which holds object needs to be deleted?
我做了一对这样的
typedef std::pair<int, Dish> OrderPair;
当 Dish 是一个对象时。 我得到了一个订单对的向量:
std::vector<OrderPair> orderList;
假设我想从矢量中删除一对,当我不想从内存中删除盘子时,擦除功能是否足够?我认为答案是肯定的,因为创建一对不是堆,因此我不需要释放任何内存。如果我错了,请告诉我。
当您的OrderPair
被删除时,作为其中一部分的Dish
也消失了。当std::vector<OrderPair> orderList
超出范围(声明它的函数的结束等)时,所有OrderPair
,因此其中的所有Dish
也都消失了。当您使用erase
擦除OrderPair
时,该Dish
就消失了。
当我不想删除菜肴时,擦除功能就足够了 凭记忆?
如果你调用erase
,那么OrderPair
,因此Dish
从内存中消失。如果这不是您想要的,则需要不同的数据结构。例如,如果OrderPair
不包含Dish
而是指向Dish
的指针,如下所示:
typedef std::pair<int, Dish*> OrderPair;
然后,您确实可以erase
该对,并且Dish
不会从内存中删除,只是对它的引用。但是只有这么小的代码片段,就很难知道你的意图。
只有显式动态分配的对象 - 使用 new 或 malloc,需要使用 delete 或 free 显式删除。堆内存用于动态分配。
在您的情况下,您正在将 Dish 对象本身推送到对中,而不是指向动态分配的指针。
>typedef std::pair <int, Dish> OrderPair;
因此,Dish 对象的作用域绑定到对对象的作用域。当使用擦除方法擦除矢量中的对时,该对和 Dish 对象也会被销毁。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 是否需要删除包含对象的"pair"?
- 如何从 pair<int、对象的向量中删除重复项>
- 我为Pair对象分配内存,但未能将对象放置在那里
- 在std::pair中存储不可复制(但可移动)的对象
- 将std::string和自定义对象存储在std::pair中
- 对无序映射的pair对象的第一部分解引用