对于std::vector的等号重载操作符的理解

在这里插入图片描述
1. 对于case (1) 赋值重载:
比如当前的vector的allocator_type是这样的:
std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value 是true。则在复制的时候需要替换当前vector中的allocator。

若赋值前后,allocatore变了,则需要用旧的解分配,然后需要重新allocate一下。

如果没有变,则不用重新allocate了呗。就用旧的allocate的内存就行了。
如果这个是false,则不需要替换allocator。这时可以复用this原来分配的内存。(注意,other的内存不复用)
但不管怎样,this的元素都会被销毁,或者被赋值替换。

这里推断默认的value都是true。

2. 对于case (2) 移动赋值重载:

比如当前的vector的allocator_type是这样的:
std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value 是true。

则要替换当前vector中的allocator。 如果allocator前后一样,则直接接管other的内存。

若为false且两者的allocator不相等,则不接管other的内存,且单独移动赋值每个元素。并用自身的分配器分配内存。

若为false且两者的allocator一样,也可以接直接接管other的内存。

但不管怎样,this的元素都会被销毁,或者被赋值替换。

绿色的地方他没说,我根据文档写的来推断出来的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值