C++ Weak Pointer2024 年 8 月 28 日 | 阅读 6 分钟 在本文中,我们将讨论 C++ 中的弱指针,包括它们的语法和示例。 C++ 中的weak_ptr是一个标准库组件。它用于存储对 shared_ptr 标准库指针所控制的任何对象的弱引用,该指针最终用于将 weak_ptr 转换为 shared_ptr。从 weak_ptr 最终创建的 shared_ptr 用于访问被引用的对象。一个 shared_ptr 在从 weak_ptr 创建后,如果这个 weak_ptr 已经不再被任何 shared_ptr 所控制,那么它将失去永久存在的意义,这表明它只存在短暂的时间。因此,在访问 weak_ptr 指向的对象之前,不建议直接访问,而是应先将其转换为 shared_ptr。 语法它具有以下语法: 根据 C++ weak_ptr 函数的语法,Class T 作为参数提供,用于表示 weak pointer 所控制的类型。 C++ 的 weak_ptr 是如何工作的?在高级语言中,每个指针主要用于引用对象,然后以结构化的方式访问数组中可用的元素。C++ 的weak_ptr也遵循类似的模式。weak_ptr 的工作流程在类模板中进行了描述。
C++ 中的 weak_ptr 示例以下是 C++ 中 weak_ptr 的一些示例 示例 - 1 输出 Weak pointer value: 42 Weak pointer is expired after reset 说明 在此示例中,共享指针 shared_Ptr 指向值为 42 的 int。之后,创建了一个 sharedPtr 和一个 std::weak_ptrweakPtr。如果原始对象已被删除,Lock() 函数将返回一个空的共享指针,该指针用于从弱指针检索共享指针。 该程序首先打印共享对象的值,当它使用弱指针访问它时。之后,共享指针被重置,模拟了初始共享指针不再控制该对象的情况。重置共享指针后,程序会尝试再次使用弱指针访问该对象。 示例 - 2 输出 Acquired weak_ptr through Lock(): 14 Weak pointer expired: false Weak pointer expired after reset: true 示例 - 3 输出 Count of sharedPtr1: 1 Count of weakPtr: 1 Count of sharedPtr1 after sharedPtr2 creation: 2 Count of weakPtr after sharedPtr2 creation: 2 示例 - 4 输出 *shrd_ptr_1 == 8 *shrd_ptr_1 == 10 *shrd_ptr_1 == 8 *wk_ptr_1 == 8 *wk_ptr_2 == 10 *wk_ptr_1 == 8 说明 此程序演示了如何利用 swap() 方法在需要获取所需资源时交换 weak_ptr,如输出所示。 在提供的程序的开头,创建了指向整数 8 和10 的 shared_ptr 实例 shrd_ptr_1 和 shrd_ptr_2。之后,打印 shrd_ptr_1 的值(为8)。接下来,它使用成员函数 swap 和标准库中的 swap 函数来交换 shrd_ptr_1 和 shrd_ptr_2 的内容。因此,shrd_ptr_1 的值从8 变为10,然后再变回。作为 shared_ptr 实例的一部分,程序创建了两个 weak_ptr 实例,wk_ptr_1 和 wk_ptr_2。t 打印 wk_ptr_1 的值 8。之后,使用成员函数 swap 和标准库中的 swap 函数交换 wk_ptr_1 和 wk_ptr_2 的所有权。交换 wk_ptr_1 和 wk_ptr_2 的值后,wk_ptr_1 现在包含数字10。程序最后再次交换 wk_ptr_1 和 wk_ptr_2 以恢复到之前的所有权。之后,打印 wk_ptr_1 的值,返回8。 结论C++ weak_ptr 函数对于获取和访问列表节点元素至关重要。此外,shared_ptr 和 weak_ptr 协同工作,创建了一个优化的周期来访问元素。一旦选择了 shared_ptr,它通常被认为是永久操作。C++ weak_ptr 函数为资源获取提供了许多优势。 |
在 C++ 中对元素进行排序时,会计算每个元素的频率,然后根据元素的排序顺序来确定。您可以通过使用 std::sort 等排序算法以及 std::map 和 std::unordered_map 等数据结构来完成此工作。信息...
阅读 3 分钟
如果调用函数未能为参数提供值,编译器将自动分配函数声明中提供的默认参数中指定的值。如果提供了任何值,则会覆盖默认值。这是一个显示...的直接 C++ 示例。
阅读 3 分钟
在 C++ 中,可以使用算术运算符来对两个数字进行加法运算。用于加法的算术运算符是加号(+)。要将两个数字相加,您首先声明用于存储数字的变量,然后使用加号将它们相加。C++ 代码:#include...
阅读 3 分钟
素数是指大于 1 且只能被 1 或自身整除的数。换句话说,素数不能被除自身或 1 以外的任何数整除。例如,2、3、5、7、11、13、17、19、23……是素数...
阅读1分钟
在本文中,您将了解其语法、参数和示例。ratio_greater() 是一个内置的 C++ 函数,用于确定比率 R1 是否大于比率 R2。返回布尔常量“value”;如果比率 1 大于比率 2,...
阅读 4 分钟
椭圆是具有独特属性的几何形状,在数学和现实世界的应用中起着至关重要的作用。本文帮助在 C++ 中计算椭圆的面积。椭圆是一种闭合曲线,其特征与其他几何形状不同。与圆不同,...
阅读 4 分钟
C++ 编程语言中的全局常量是其值在程序执行期间保持不变,并且在任何函数之外声明和定义的变量。const 关键字用于将变量声明为常量,以确保变量的值无法更改...
阅读 4 分钟
C++ 中的自底向上方法是一种软件开发策略,它涉及将复杂的系统分解为更小、更易于管理的部分,然后将这些部分构建成一个更大、更全面的程序。这种方法可以与自顶向下方法相对应,后者从...
阅读 3 分钟
在本文中,我们将讨论 std::numeric_limits::max() 和 std::numeric_limits::min() 函数,包括它们的语法和示例。std::numeric_limits::max() 是什么? std::numeric_limits<T>:: max() 方法返回由数值类型 T 表示的最大有限数字。所有算术类型都可以用于类型 T。头文件:#include<limits> 模板:static T max() throw(); static...
阅读 2 分钟
简介:C++ 中与字符串交互的默认方法称为 std::string,因为它为用户提供了广泛的有用功能。在许多其他字符串操作中,std::string 提供字符串操作,包括查找子字符串、比较字符串、连接字符串和切片字符串。但是每次...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India