21xrx.com
2024-11-10 00:18:19 Sunday
登录
文章检索 我的文章 写文章
C++11智能指针示例代码
2023-06-28 00:47:21 深夜i     --     --
C++11 智能指针 示例代码

C++11智能指针是一个旨在提高程序性能和减少内存泄漏的功能强大的工具。它可以使用RAII(资源获取即初始化)来自动管理内存分配和释放。在C++11中,有三种不同类型的智能指针:unique_ptr,shared_ptr和weak_ptr。在本文中,我们将讨论如何使用C++11智能指针来管理内存分配和释放。

一、unique_ptr示例代码

unique_ptr是一种独占所有权的智能指针,它可以确保只有一个指针可以访问分配的内存。当unique_ptr离开作用域时,它分配的内存将自动释放。下面是一个unique_ptr的示例代码:


#include <iostream>

#include <memory>

int main() {

  std::unique_ptr<int> myPtr(new int(42));

  std::cout << *myPtr << std::endl;

  return 0;

}

在上面的代码中,我们使用std::unique_ptr来管理一块int类型的内存。myPtr指向该内存,并在末尾使用RAII机制自动释放该内存。

二、shared_ptr示例代码

shared_ptr是一种可以与其他shared_ptr共享所有权的智能指针。当最后一个shared_ptr离开作用域时,它分配的内存将被释放。下面是一个shared_ptr的示例代码:


#include <iostream>

#include <memory>

int main() {

  std::shared_ptr<int> myPtr1(new int(42));

  std::shared_ptr<int> myPtr2 = myPtr1;

  std::cout << *myPtr1 << std::endl;

  std::cout << *myPtr2 << std::endl;

  return 0;

}

在上面的代码中,我们创建了两个shared_ptr:myPtr1和myPtr2。这两个指针都共享同一块int类型的内存,并在离开作用域时自动释放该内存。

三、weak_ptr示例代码

weak_ptr是一种不拥有所有权的智能指针,它可以从shared_ptr派生而来。它可以像shared_ptr一样指向一块内存,但是它并不会增加内存所属对象的引用计数,因此不会影响内存的释放。下面是一个weak_ptr的示例代码:


#include <iostream>

#include <memory>

int main() {

  std::shared_ptr<int> myPtr1(new int(42));

  std::weak_ptr<int> myPtr2 = myPtr1;

  std::cout << *myPtr1 << std::endl;

  if (auto myPtr3 = myPtr2.lock()) {

    std::cout << *myPtr3 << std::endl;

  } else

    std::cout << "Memory has been released." << std::endl;

  

  return 0;

}

在上面的代码中,我们创建了一个shared_ptr:myPtr1,并创建了一个weak_ptr:myPtr2指向相同的内存。我们使用lock()函数尝试将weak_ptr转换为shared_ptr,如果内存仍然存在,则转换成功并打印其值。如果内存已被释放,则输出一条消息指出内存已被释放。

总之,C++11智能指针可以在大大减少内存泄漏的同时,还可以提高代码的性能。我希望本文的示例代码能够帮助您更好地理解如何使用C++11智能指针来管理内存。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复