智能指针17 Mar 2025 | 5 分钟阅读 指针用于访问程序外部的资源,例如堆内存。因此,指针用于访问堆内存(如果堆内存中创建了任何内容)。在访问任何外部资源时,我们只是使用它的副本。如果进行任何更改,我们只在复制的版本中进行更改。但是,如果使用指向该资源的指针,我们可以更改原始资源。 普通指针的问题请查看以下代码。 C++ 代码 函数 fun 生成一个指向 Rectangle 对象的指针。Rectangle 由两个整数组成:length 和 breadth。由于 p 是局部变量,当函数 fun 结束时它将被销毁。但是,由于我们忘记在函数末尾使用 delete p;,它所消耗的内存将不会被释放。这意味着内存将无法供其他资源使用。然而,我们不再需要该变量,而是需要该内存。 Fun 在 main 函数中被无限循环调用。这意味着它将继续生成 p。它将分配更多内存,但不会释放它,因为我们没有释放它。未使用的内存无法再次使用。这导致内存泄漏。因此,整个堆内存可能变得无用。智能指针,C++11 的一个特性,为此问题提供了解决方案。 智能指针简介。无意识地不释放指针会导致内存泄漏,这可能会导致程序崩溃。Java 和 C# 等语言使用垃圾回收机制来智能地释放未使用的内存,以便可以再次使用。程序员不必担心内存泄漏。智能指针是 C++11 开发的一种机制。当对象被销毁时,内存也会被释放。因此,我们不需要删除它,因为智能指针会处理它。 智能指针是一个指针包装类,它重载了 * 和 -> 等运算符。智能指针类的对象类似于普通指针。但是,与普通指针不同,它能够释放和解除已销毁对象的内存。 考虑一个具有指针、析构函数以及重载运算符(如 * 和 ->)的类。由于当对象超出作用域时析构函数会自动调用,因此动态分配的内存将被删除(或引用计数可以递减)。请考虑下面显示的 SmartPtr 类。 C++ 代码 输出 20 这只适用于 int。那么我们需要为每个对象创建一个智能指针吗?不,模板是一个解决方案。如您在下面的代码中看到的,T 可以是任何类型。单击此处了解有关模板的更多信息。 C++ 代码 输出 20 注意:智能指针还可以用于管理文件句柄或网络套接字等资源。智能指针类型1. unique_ptrunique_ptr 只存储一个指针。通过从指针中移除当前对象,我们可以分配一个不同的对象。请注意下面的代码。首先,unique_ptr 指向 P1。但是,我们移除 P1 并用 P2 替换它,因此指针现在指向 P2。 ![]() C++ 代码 输出 50 50 2. shared_ptr使用 shared_ptr,多个指针可以同时指向同一个对象,并且它将使用 use_count() 方法维护一个引用计数器。 ![]() C++ 代码 输出 50 50 50 2 3. weak_ptr它与 shared_ptr 非常相似,不同之处在于它不维护引用计数器。在这种情况下,指针不会对对象有强引用。这样做的原因是,如果指针在请求其他对象时持有对象,它们可能会形成死锁。 ![]() 下一主题C++ 中的货币转换器 |
字符串连接是指将两个额外字符串连接起来以生成连接的单个字符串的字符集合。在连接字符串时,第二个字符串被附加到第一个字符串的末尾以形成单个字符串。示例:Input1:st1="Over",st2="loading" Output:Overloading Input1:st1="Left",st2="Join" Output:LeftJoin 方法 1:...
阅读 3 分钟
简介 C++ 的 fstream 库提供了一种灵活而强大的方法,可以通过流处理文件。C++ 标准库包含此库,它提供了一种简化的方法来向文件读写数据。fstream 简化了文件处理,它...
阅读 6 分钟
foreach 循环用于快速迭代容器(数组、向量等)的元素,而无需进行初始化、测试或增量/减量。Foreach 循环通过对每个元素执行某项操作而不是执行 n 次操作来工作。尽管 C++ 中没有 foreach 循环,但...
阅读 4 分钟
计算器是一种便携式设备,可帮助我们在日常生活中执行简单的数学计算,如加法、减法、除法、乘法等。一些科学计算器用于更轻松地执行复杂计算,如平方根、函数、指数运算、对数、三角函数……
5 分钟阅读
在编写 C++ 程序来检查数字是否为阿姆斯特朗数之前,让我们了解什么是阿姆斯特朗数。阿姆斯特朗数是一个等于其数字立方和的数字。例如 0、1、153、370、371 等。
阅读1分钟
在现代 C++ 语言中,我们可以使用属性来提高代码效率并减少程序员编写大量代码的时间。它们就像附加的条件,写在代码中,并且编译器会….
阅读 3 分钟
有时需要输入的数据在执行时分配。例如,随着新员工加入组织,员工列表会增加,当有人离开组织时也会减少。这被称为管理……
阅读 3 分钟
我们知道 C++ 编程语言在其标准模板库 (STL) 中拥有数据结构和算法的预定义实现;如果不存在,我们需要编写整个代码,这会花费编译器大量编译时间,并且... 。
阅读 4 分钟
在本文中,我们将讨论 C++ 中 Tokens、Identifiers 和 Keywords 之间的区别。但在讨论它们之间的区别之前,我们必须了解 Tokens、Identifiers 和 Keywords 在 C++ 中的含义,以及它们的类型和特征。什么是 Tokens?Tokens 是 C++ 中最小的独立片段...
7 分钟阅读
本节将讨论在 C++ 编程语言中比较给定字符串的不同方法。字符串的比较决定第一个字符串是否等于另一个字符串。示例:HELLO 和 Hello 是两个不同的字符串。有不同的方法来……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India