![在这里插入图片描述](https://img-blog.csdnimg.cn/b802d875f7f241e5af11c965adb81a96.png)
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的元素都会被销毁,或者被赋值替换。
绿色的地方他没说,我根据文档写的来推断出来的。