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

您所在的位置:网站首页 vector::iterator重载了哪些运算符 对于std::vector的等号重载操作符的理解

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

2024-07-16 18:17| 来源: 网络整理| 查看: 265

在这里插入图片描述 1. 对于case (1) 赋值重载: 比如当前的vector的allocator_type是这样的: std::allocator_traits::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::propagate_on_container_copy_assignment::value 是true。

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

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

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

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

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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3