之间的关系。 code>。容器具有分配器类型 A ,它用于为其包含的对象分配内存。 如果 m 是这些分配器之一, p a T * , rv 类型 T 和 v 的值表达式 T : CopyInsertable 由标准定义为: MoveInsertable 由标准定义为: 为了理解这些定义,我们必须知道 allocator_traits< A> :: construct 是什么。很简单,在这种情况下,它调用: m.construct(p,v)// CopyInsertable case m .construct(p,rv)// MoveInsertable case c $ c> construct 成员函数do?好吧,正如你可能期望的,它通过执行以下操作在位置 p 构造类型 T 的对象: :: new((void *)p)T(v)// CopyInsertable case :: new((void * )p)T(rv)// MoveInsertable case So what does an allocators construct member function do? Well, as you might expect, it constructs an object of type T at the location p by doing:::new ((void*)p) T(v) // CopyInsertable case::new ((void*)p) T(rv) // MoveInsertable caseOf course, these will invoke the copy or move constructors respectively.So:T is CopyInsertable into X: the allocator for X can placement-new construct an element of T, passing an expression of type TT is MoveInsertable into X: the allocator for X can placement-new construct an element of T, passing an rvalue of type T 这篇关于MoveInsertable和CopyInsertable之间的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-22 09:15