c++ - C++ 入门 5 版。为 String 类编写移动构造函数
问题描述
我在 C++ Primer 5 ed 中有这个练习。它要求我为我的类添加一个移动构造函数和一个移动赋值运算符String
。
String
有指向字符 (char*
) 的指针。看起来像:class String { public: String(String&&) noexcept; // move constructor String& operator=(String&&) noexcept;// move assignment operator private: iterator beg_; //using iterator = char*; iterator end_; iterator off_cap_; alloc alloc_; // using alloc_ = std::allocator<char> };
现在在实现文件中,我以这种方式定义了 move-ctor:
// move constructor
String::String(String&& rhs) noexcept :
beg_(rhs.beg_), // or beg_(std::move(rhs.beg_))?
end_(rhs.end_),
off_cap_(rhs.off_cap_),
alloc_(rhs.alloc_)// or alloc_(std::move(rhs.alloc_))?
{
std::cout << "String move-ctor\n";
rhs.beg_ = rhs.end_ = rhs.off_cap_ = nullptr; // putting objects in a destructible valid state
// alloc_
}
那么我应该
std::move
在这些成员上使用还是直接使用?因为它们是指向的内置指针char
?- 这两个案例给了我预期的结果。我应该移动分配器
alloc_
吗?如果是,如何?搬出分配器会发生什么?以及如何进入可破坏的有效状态?原谅我这么多问题。感谢您的努力和时间。
PS:请不要问我是否违反了 3、5 和 6 的规则,因为为了可读性和简洁性,我没有从我的源代码中复制它。
解决方案
推荐阅读
- docker - 如何让我的 docker 容器连接到代理?
- http - 如何解析 .http 文件,如 IntelliJ IDEA http 客户端?使用哪个库?
- javascript - 以角度将文件转换为 uInt8Array
- python - tensorflow 2 中是否有一个函数,我可以创建一个由 1 和 0 组成的一维张量,它们之间的距离相等?
- embedded-linux - 在 Qemu 上运行 buildroot 生成的覆盆子图像的问题
- r - 你如何在 R 中的用户定义函数中使用 any、if_any 或类似的东西?
- google-apps-script - Google Sheets Apps 脚本 - 移动设备上的输入框
- javascript - 使用 mongodb 自动填充输入
- excel - 更改事件中的 Excel VBA 参数不是可选错误
- automated-tests - 如何对 Slack App 进行自动化测试?