下面自己实现了字符串类,命名为String.然后分为类实现移动构造函数(mctor)和移动赋值运算符函数(masgn).并且对比在该类有mctor和masgn与没有这两个函数时的效率差异.
实现代码
1 | // |
运行结果与效率比较
vector
1 | void test_vector() { |
对于vector,有mctor和masgn的情况下的运行结果(时间单位毫秒)
1 | construction, milli-seconds: 709342 |
调用了7194303次移动构造函数.之所以这里的调用移动构造函数次数多于元素个数是因为vector在插入过程,一旦内存不足,需要扩容,而扩容的过程是分配一块新的内存,然后将旧的元素搬到新的内存中,再释放新的内存.
没有这两个函数时的运行结果
1 | construction, milli-seconds: 912494 |
调用的是拷贝构造函数.
list
1 | void test_list() { |
运行结果
有mctor和masgn的情况下
1 | construction, milli-seconds: 771100 |
没有mctor和masgn的情况下
1 | construction, milli-seconds: 837069 |
对于list,有无移动构造函数,没有特别大的影响.
deque
1 | void test_deque() { |
运行结果
有mctor和masgn的情况下
1 | construction, milli-seconds: 621955 |
没有mctor和masgn的情况下
1 | construction, milli-seconds: 697399 |
对于deque,在尾端插入的情况,影响同样不大,但是如果在中间位置输入,则会影响较大.