如何创建和使用 ''unique_ptr'' 实例2024年8月28日 | 阅读 9 分钟 C 和 C++ 编程语言中的实例是什么?在 C 语言中,实例是指对象或数据结构的单个出现。例如,如果你有一个名为“Dog”的类,你从该类创建的每只狗都将是“Dog”类的实例。这意味着每个类实例都将拥有由类定义的自己的数据和行为集。 例如,你可能创建“Dog”类的两个实例,一个用于名为“Fido”的狗,另一个用于名为“Snoopy”的狗。这两个实例将各自拥有自己的一组特征,例如它们的名称、年龄和品种,以及它们的行为,例如能够吠叫或捡球。 在 C 语言中,你可以使用 new 关键字创建类的实例,如下所示: 语法 在这里,我们创建了“Dog”类的两个实例,一个用于 Fido,另一个用于 Snoopy。每个实例在创建实例时都指定了自己的数据集,例如名称、年龄和品种。 这是一个展示如何在 C 语言中创建名为“Dog”的类,然后创建该类的实例的示例。 编码 在此示例中,“Dog”类有一个构造函数,用于初始化每个类实例的数据。它还有一个“bark”方法,可以让狗吠叫。 在 main 函数中,我们创建了“Dog”类的两个实例,一个用于 Fido,另一个用于 Snoopy。然后,我们对每个实例调用 bark 方法,让狗吠叫。 运行此程序时,它应该会打印以下输出。 输出 Fido says Woof! Woof! Snoopy says Woof! Woof! C++ 实例在 C++ 中,实例是指对象或数据结构的单个出现。例如,如果你有一个名为“Dog”的类,你从该类创建的每只狗都将是“Dog”类的实例。这意味着每个类实例都将拥有由类定义的自己的数据和行为集。 例如,你可能创建“Dog”类的两个实例,一个用于名为“Fido”的狗,另一个用于名为“Snoopy”的狗。这两个实例将各自拥有自己的一组特征,例如它们的名称、年龄和品种,以及它们的行为,例如能够吠叫或捡球。 在 C++ 中,你可以使用 new 关键字创建类的实例,如下所示: 在这里,我们创建了“Dog”类的两个实例,一个用于 Fido,另一个用于 Snoopy。每个实例在创建实例时都指定了自己的数据集,例如名称、年龄和品种。 编码 在此示例中,“Person”类有一个构造函数,用于初始化每个类实例的数据。它还有一个“printing”方法,可以打印人的姓名和年龄。 在 main 函数中,我们创建了“Person”类的两个实例,一个用于 John,另一个用于 Jane。然后,我们对每个实例调用 printing 方法,以打印他们的信息。 运行此程序时,它应该会打印以下输出。 输出 Name: John, Age: 32, Gender: Male Name: Jane, Age: 28, Gender: Female 首先,什么是指针?在 C 和 C++ 中,指针是一个变量,它保存另一个变量的内存地址。指针通常指向在运行时动态分配的内存位置,例如在使用 C 中的 malloc 函数或 C++ 中的 new 运算符时。 指针很有用,因为它们允许你直接操作为程序分配的内存,从而让你更精确地控制程序如何使用内存。例如,你可以使用指针来访问和修改特定内存位置中的数据,或者创建比标准库提供的更高效、更灵活的数据结构。 其他语言没有指针,因为它们很难正确使用,并且会使你的代码更难理解和维护。例如,不正确地使用指针可能导致内存泄漏或其他运行时错误,而这些错误可能很难诊断和修复。此外,指针会使代码行为的推理更加困难,因为指针的值可以在运行时动态更改。 但是,其他语言提供了允许你直接操作内存的类似功能,例如 C++ 中的引用或 C# 中的“不安全”代码。这些功能在某些情况下可能很有用,但应谨慎使用,因为它们也可能引入指针可能导致的相同类型的问题。 C 代码 输出 x = 10 ptr = 0x7ffc1e1092ac *ptr = 10 x = 20 ptr = 0x7ffc1e1092ac *ptr = 20 C++ 代码 输出 x = 10 ptr = 0x7ffd1cfc1ebc *ptr = 10 x = 20 ptr = 0x7ffd1cfc1ebc *ptr = 20 在上面的示例中,ptr 是一个指向 int 变量的指针。& 运算符用于获取 x 变量的地址,* 运算符用于解引用指针并访问存储在该地址的值。然后使用指针修改 x 的值。 什么是智能指针?在 C 和 C++ 中,智能指针是一种像指针一样的对象,但具有额外的功能,有助于管理被指向对象的生命周期。智能指针可以在不再需要对象时自动删除对象,并防止内存泄漏。 这是一个 C++ 中智能指针的示例: 输出 5 说明 此代码将创建一个值为 5 的新整数对象,并将其地址存储在 unique_ptr 中。然后使用 unique_ptr 访问整数的值,该值将被打印到控制台。 由于 unique_ptr 管理它所指向的对象的生命周期,因此当 unique_ptr 在 main 函数结束时超出范围时,该整数对象将被自动删除。这有助于防止内存泄漏。 请注意,C++ 中有几种不同类型的智能指针,每种都有其特定的行为。unique_ptr 只是一个例子。其他常见的智能指针类型包括 shared_ptr 和 weak_ptr。 为什么 C 语言不支持智能指针?智能指针是 C++ 的一项功能,而不是 C 语言的。在 C++ 中,智能指针是一种包装原始指针并管理原始指针所指向对象的生命周期的对象。智能指针在超出作用域时会自动删除它们指向的对象,这有助于防止内存泄漏。 为什么 C 语言没有 unique_ptr?unique_ptr 不是 C 语言的一部分。unique_ptr 是一种智能指针,在 C++ 编程语言中可用。智能指针是一种对象,它的行为类似于普通指针,但还具有额外的功能,例如自动内存管理和边界检查。 unique_ptr 是一个拥有并管理其指向对象的智能指针。这意味着 unique_ptr 负责为其指向的对象分配和释放内存,并且它是唯一可以访问或修改该内存的对象。unique_ptr 提供了一种安全高效地管理动态分配内存的方法,通常用作 C++ 中原始指针的替代品。 C++ Unique_ptr std::unique_ptr 是一种管理动态分配对象的生命周期的智能指针。它确保在 unique_ptr 超出作用域时正确删除该对象,并通过其 -> 和 * 运算符提供访问该对象的方式。 以下是如何创建和使用 unique_ptr 的示例。 示例 1 输出 5 6 false 6 7 说明 在此示例中,我们创建了一个名为 ptr1 的 unique_ptr,它指向值为 5 的动态分配的 int。我们使用 -> 和 * 运算符来访问和操作 ptr1 指向的对象。 接下来,我们使用 std::move 函数将对象的所有权转移给一个名为 ptr2 的新 unique_ptr。这意味着 ptr1 不再指向该对象。 示例-2 输出 ptr = 0x55d09d214eb0 *ptr = 10 ptr = 0x55d09d214eb0 *ptr = 20 示例-3 输出 MyClass constructed MyClass destructed 下一个主题螺旋形式的层序遍历 |
在 C++ 中,自顶向下方法是一种编程方法,它涉及从问题概述开始,将其分解为更小的子问题,然后通过分层实现每个子问题来逐步构建解决方案。这种方法也称为“分解...
阅读 3 分钟
什么是 C++ STL?STL 是 C++ 标准模板库的缩写。该库包含用于各种用途的内置函数和类。列表也是在标准模板库 (STL) 中定义的数据结构。有很多内置函数可用于……
阅读 4 分钟
密码算术谜题有时也称为文字算术或字母算术。在这些基于数学的谜题中,字母或符号代表算术方程中的数字。此谜题的主要目的是确定用于构成...
阅读 15 分钟
c++ 中的 strcmp() 函数是词典式比较以 null 结尾的字符串或两个字符数组。它是 c++ 中一个内置的库函数。此函数以参数形式接收要比较的两个字符数组。根据第一个不同的字符,一个...
阅读 4 分钟
数值分析的一个重要部分是在预定范围内查找连续函数根的过程。在这种情况下,二分法提供了一种查找根的简单方法,有时也称为区间缩小法、二分查找法或二分法...。
阅读 4 分钟
统一初始化:对象值的初始化和赋值一直是 C++ 编程领域发展和改进的领域。C++11 中引入统一初始化是朝着更标准化和用户友好的初始化语法迈出的重要一步。此方法的目的是...
阅读 4 分钟
在处理 C++ 编程时,格式化输出在提高代码可读性和用户友好性方面起着至关重要的作用。在控制输出格式的可用工具中,setf() 函数是一项有价值的功能。这篇博文将深入探讨 setf() 函数...
阅读 3 分钟
QString 是 Qt 中的一个流行类,Qt 是一个用于在 C++ 中开发 GUI 应用程序的跨平台应用程序框架。QString 是一个 Unicode 字符串,用于存储和操作文本。但是,有时您可能需要将 QString 转换为十六进制表示。这...
阅读 3 分钟
在 C++ 中,还存在一种情况,即需要通过最小增量来找到数组中的最小排除值 (MEX)。MEX 通常找到数组元素中未出现的最小非负整数。最终产物...
18 分钟阅读
?本节将讨论 C++ 编程语言中两个或多个字符串的连接。字符串的连接意味着将两个或多个字符串组合起来,返回一个连接后的单个字符串。在连接字符串时,第二个字符串被添加到…
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India