当前位置:实例文章 » 其他实例» [文章]【C++】智能指针

【C++】智能指针

发布人:shili8 发布时间:2025-02-11 08:13 阅读次数:0

**智能指针**
================在 C++ 中,智能指针是一种特殊类型的指针,它能够自动管理内存的分配和回收。这种机制可以帮助我们避免常见的内存泄漏问题,使我们的程序更加安全和高效。

**什么是智能指针?**
-------------------

智能指针是一种类似于原始指针(raw pointer)的类型,但它具有额外的功能:当指向的对象被释放时,智能指针会自动将其自身设置为 nullptr。这种机制使得我们不再需要手动管理内存,从而减少了程序中的错误。

**C++ 中的智能指针**
-------------------

在 C++ 中,有两种主要类型的智能指针:

1. **unique_ptr**:这是一个独占式的智能指针,它保证只有一个指向该对象的智能指针。这种类型的智能指针是最常用的。
2. **shared_ptr**:这是一个共享式的智能指针,它允许多个指向同一对象的智能指针。

### unique_ptr`unique_ptr` 是一种独占式的智能指针,意味着它保证只有一个指向该对象的 `unique_ptr`。这使得我们可以安全地使用 `unique_ptr` 来管理内存。

cpp#include 

class MyClass {
public:
 MyClass() { std::cout << "MyClass constructed." << std::endl; }
 ~MyClass() { std::cout << "MyClass destroyed." << std::endl; }

private:
 int data;
};

int main() {
 // 使用 unique_ptr 来管理内存 std::unique_ptr ptr = std::make_unique();

 return0;
}


在上面的示例中,我们使用 `std::make_unique` 来创建一个 `MyClass` 对象,并将其赋值给 `ptr`。由于 `ptr` 是独占式的智能指针,所以当它被销毁时,内存也会自动释放。

### shared_ptr`shared_ptr` 是一种共享式的智能指针,它允许多个指向同一对象的 `shared_ptr`。这使得我们可以安全地使用 `shared_ptr` 来管理内存。

cpp#include 

class MyClass {
public:
 MyClass() { std::cout << "MyClass constructed." << std::endl; }
 ~MyClass() { std::cout << "MyClass destroyed." << std::endl; }

private:
 int data;
};

int main() {
 // 使用 shared_ptr 来管理内存 std::shared_ptr ptr1 = std::make_shared();
 std::shared_ptr ptr2 = ptr1;

 return0;
}


在上面的示例中,我们使用 `std::make_shared` 来创建一个 `MyClass` 对象,并将其赋值给 `ptr1`。然后,我们将 `ptr1` 赋值给 `ptr2`,这意味着 `ptr2` 和 `ptr1` 都指向同一对象。

### weak_ptr`weak_ptr` 是一种弱引用类型,它允许我们访问一个 `shared_ptr` 所指向的对象,而不增加该对象的引用计数。这种类型的智能指针是非常有用的,因为它可以帮助我们避免死锁问题。

cpp#include 

class MyClass {
public:
 MyClass() { std::cout << "MyClass constructed." << std::endl; }
 ~MyClass() { std::cout << "MyClass destroyed." << std::endl; }

private:
 int data;
};

int main() {
 // 使用 weak_ptr 来访问 shared_ptr 所指向的对象 std::shared_ptr ptr = std::make_shared();
 std::weak_ptr wptr = ptr;

 return0;
}


在上面的示例中,我们使用 `std::make_shared` 来创建一个 `MyClass` 对象,并将其赋值给 `ptr`。然后,我们将 `ptr` 赋值给 `wptr`,这意味着 `wptr` 是一个弱引用类型,它指向 `ptr` 所指向的对象。

**总结**
----------

智能指针是一种特殊类型的指针,它能够自动管理内存的分配和回收。这种机制可以帮助我们避免常见的内存泄漏问题,使我们的程序更加安全和高效。在 C++ 中,有两种主要类型的智能指针:`unique_ptr` 和 `shared_ptr`。`weak_ptr` 是一种弱引用类型,它允许我们访问一个 `shared_ptr` 所指向的对象,而不增加该对象的引用计数。

**参考**
----------

* [C++11 中的智能指针]( />* [C++14 中的智能指针]( />* [C++17 中的智能指针](

相关标签:c++开发语言
其他信息

其他资源

Top