共享性智能指针的拷贝改造函数和移动赋值函数仿写
时间: 2024-10-28 16:07:43 浏览: 11
共享性智能指针是一种管理动态资源的对象,它通常用于避免内存泄漏,尤其是在C++中。当创建一个智能指针时,它负责生命周期管理,确保所指向的对象只被删除一次。对于拷贝改造(copy constructor)和移动赋值(move assignment operator),它们的设计旨在优化资源的分配和释放:
1. **拷贝构造函数** (`CopyConstructor`): 当一个新的共享性智能指针从已存在的另一个智能指针复制而来时,这个函数会新建一个指向相同资源的新实例,并增加引用计数。如果原始对象是可复制的(没有显式禁用复制),则只需增加引用,不会创建新副本;如果是不可复制的,比如RAII对象(Resource Acquisition Is Initialization,即资源获取就初始化),那么会创建新的资源。
```cpp
template <typename T>
class SharedPtr {
public:
// 拷贝构造函数
SharedPtr(SharedPtr<T> other) : shared_ptr(new T(*other.get())) {
++other->ref_count; // 或者采用共享策略其他方式
}
private:
T* shared_ptr;
int ref_count;
};
```
2. **移动赋值函数** (`MoveAssignmentOperator`): 当一个智能指针接受另一个智能指针的资源(移动)时,原智能指针的资源会被释放,而接收者智能指针的引用计数会增加。这允许高效地传递大型数据结构,减少不必要的内存复制。
```cpp
SharedPtr<T>& SharedPtr<T>::operator=(SharedPtr<T> other) {
if (this != &other) { // 防止自我赋值
shared_ptr.reset(other.shared_ptr.release()); // 移除原对象的管理,然后把资源转移到当前对象
other.shared_ptr = nullptr; // 释放旧对象的资源
}
return *this;
}
```
阅读全文