type
status
date
slug
summary
tags
category
icon
password
Property
一些类需要分配可变大小的内存,这种类最好是用标准库容器来保存数据。然而,这种策略并不适合于所有类,有些类需要自己分配数据。这些类通常定义自己的拷贝控制成员来管理内存分配。
当调用
reallocate
时,并不需要将就数据中的字符串拷贝到新的数据中,原因是旧数据马上就要被丢弃了,此时应该移动而不是拷贝这个数据,这样就避免了给字符串重新分配内存。移动构造函数和
std::move
通过移动构造函数可以将给定对象的资源移动到将要被构建的对象中去。移动构造函数将保证被移动的对象,其内部状态是可以被有效的析构的。如:指针变为空指针。
同时标准库中定义了一个新函数
std::move
在 utility
头文件中。使用move
函数有两点需要注意:- 如果希望调用移动构造函数需要调用
std::move
来告诉编译器使用移动构造函数,否则,将会使用拷贝构造函数。
- 调用
move
必须加上作用域限定符,显式告诉编译器我们调用的是哪个版本的函数:
调用
move
将返回一个结果,这个结果将导致 construct
函数使用 string
的移动构造函数。由于使用了移动构造函数,由这些 string
管理的内存将不会被拷贝。相反,新构建的 string
将获取旧 string
的所有权。在移动元素之后,就可以将旧的元素给 free
掉了,移动构造函数将保证可以安全的将 string
析构掉或者被赋予新的值。