当前版本c++常用智能指针
时间: 2023-10-27 12:05:05 浏览: 70
在C++中,常用的智能指针包括:
1. std::unique_ptr:独占式智能指针,用于管理动态分配的对象,保证在离开作用域时自动释放资源。
2. std::shared_ptr:共享式智能指针,多个智能指针可以共享同一个对象,当最后一个指向该对象的shared_ptr被销毁时,才会释放资源。
3. std::weak_ptr:弱引用智能指针,用于解决shared_ptr的循环引用问题,可以访问但不拥有shared_ptr指向的对象。
这些智能指针都位于头文件<memory>中。使用智能指针可以避免手动管理内存的繁琐和容易出错,提高代码的可读性和可靠性。
相关问题
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时,自动释放内存。
需要注意的是,智能指针仅能用于管理动态分配的内存,不能用于管理静态分配的内存或者栈上的对象。此外,需要避免循环引用的问题,即两个对象相互引用,而没有外部引用了其中任何一个对象,这会导致内存泄漏。
阅读全文