移动语义(C++11)是C++面向对象设计的革命性改进,它通过资源所有权转移而非拷贝来提升性能,同时深刻影响了类层次结构的设计方式。以下从5个关键维度解析其影响:
1. 多态对象所有权管理
传统问题
std::vector<Animal*> zoo; // 基类指针存储派生类对象
zoo.push_back(new Lion()); // 需要手动管理内存
现代解决方案
std::vector<std::unique_ptr<Animal>> zoo;
zoo.push_back(std::make_unique<Lion>()); // 自动管理+支持移动
影响:
- 消除了手动
delete的需求 - 移动语义使得容器重组时效率极高(仅转移指针所有权)
2. 三/五法则的演进
经典法则(C++03)
类需要显式定义:
- 析构函数
- 拷贝构造函数
- 拷贝赋值运算符
现代法则(C++11+)
新增:
- 移动构造函数
- 移动赋值运算符
示例:
class Widget {
int* data;
public:
// 移动构造
Widget(Widget&& other) noexcept
: data(std::exchange(other.data, nullptr)) {
}
// 移动赋值
Widget& operator=(Widget&& other)

最低0.47元/天 解锁文章
1376

被折叠的 条评论
为什么被折叠?



