C++实现智能指针
时间: 2023-08-12 16:23:32 浏览: 112
c++智能指针的实现
C++中的智能指针是一种自动管理动态分配内存的指针,可以避免内存泄漏和悬空指针等问题,同时可以提高代码的安全性和可维护性。其中最常用的智能指针是std::shared_ptr和std::unique_ptr。
下面是一个简单的智能指针类的实现:
```c++
template<typename T>
class SmartPointer {
public:
explicit SmartPointer(T* ptr = nullptr) : ptr_(ptr), count_(new int(1)) {}
SmartPointer(const SmartPointer<T>& other) : ptr_(other.ptr_), count_(other.count_) {
++(*count_);
}
SmartPointer<T>& operator=(const SmartPointer<T>& other) {
if (this != &other) {
if (--(*count_) == 0) {
delete ptr_;
delete count_;
}
ptr_ = other.ptr_;
count_ = other.count_;
++(*count_);
}
return *this;
}
~SmartPointer() {
if (--(*count_) == 0) {
delete ptr_;
delete count_;
}
}
T* get() const { return ptr_; }
private:
T* ptr_;
int* count_;
};
```
以上实现是一个简单的计数型引用计数智能指针,使用时只需在需要动态分配内存的地方使用该类即可,类内部维护了一个计数器,用于记录当前指针被引用的次数,当计数器为0时,自动释放内存。
需要注意的是,智能指针仅能用于管理动态分配的内存,不能用于管理静态分配的内存或者栈上的对象。此外,需要避免循环引用的问题,即两个对象相互引用,而没有外部引用了其中任何一个对象,这会导致内存泄漏。
阅读全文