C++ 的 make_unique(含 C++ 代码示例)

这篇具有很好参考价值的文章主要介绍了C++ 的 make_unique(含 C++ 代码示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

std::make_unique 是 C++11 标准引入的一个模板函数,用于动态分配指定类型的内存,并返回一个指向分配内存的唯一指针 (即 std::unique_ptr)。

std::make_unique 的语法如下:

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args);

其中,T 是指定的类型,Args 是可变长模板参数包,用于传递给指定类型的构造函数的参数。在调用 std::make_unique 时,通过 Args 包传入构造函数的参数会被转发给类型 T 的构造函数,以生成相应的对象实例。该函数返回的指针是一个 std::unique_ptr 类型,表示一个拥有指向动态内存的所有权的对象。

以下是一个使用 std::make_unique 的示例:

#include <memory>
#include <iostream>

class Foo {
public:
    Foo(int x, int y) : m_x(x), m_y(y) {}
    void Print() { std::cout << "m_x = " << m_x << ", m_y = " << m_y << std::endl; }
private:
    int m_x;
    int m_y;
};

int main() {
    auto ptr = std::make_unique<Foo>(1, 2);
    ptr->Print();
    return 0;
}

在这个示例中,我们定义了一个名为 Foo 的类,并使用构造函数接受两个 int 类型的参数初始化了一个对象实例。然后,我们使用 std::make_unique 函数动态地分配内存并创建了一个 Foo 类型的对象,该对象被封装在一个 std::unique_ptr 中并命名为 ptr,最后使用指针访问对象的成员函数 Print

【补充】:C++ 的头文件 <memory>

C++ 的头文件 memory 中包含了操作指针和内存的一些类和函数,主要用于动态内存的管理和操作。
memory 头文件中主要包括以下类和函数:

  • std::unique_ptr:智能指针类,用于管理动态分配的对象,自动处理内存的分配和释放,避免内存泄漏。
  • std::shared_ptr:共享指针类,可用于多个指针指向同一个对象,达到共享资源的目的。
  • std::weak_ptr:弱指针类,用于解决 std::shared_ptr 的循环引用问题。
  • std::allocator:用于分配和释放一段已知大小的连续内存区域,通常与 STL 中容器一起使用。
  • std::unique_ptr<T[]>:为数组提供自动内存管理的智能指针,可用于管理动态分配的数组的内存释放。

很多时候,memory 头文件是其他 STL 组件的基础,例如容器和算法。有很多使用 STL 的编译器和库实现,因此 memory 头文件可能与其他头文件一起自动包含在您的 C++ 应用程序中。
在使用 memory 头文件时,需要确保了解自己正在使用的特定函数和类的使用场景,并了解其对内存分配和释放的影响。文章来源地址https://www.toymoban.com/news/detail-640554.html

到了这里,关于C++ 的 make_unique(含 C++ 代码示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我的C++奇迹之旅:值和引用的本质效率与性能比较

    引用 不是新定义一个变量,而是给 已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 定义: 类型引用变量名(对象名) = 引用实体; 例如以下代码,在变量名前加一个 ,意思是一个引用类型, b 是 a 的别名,也就是

    2024年04月27日
    浏览(57)
  • 从数字图像到音视频学习:我的学习之旅

    数字图像是一门广泛应用于计算机视觉、图像处理和计算机图形学等领域的学科,而音视频学习则涵盖了音频和视频的处理、分析和应用。 如果你最开始接触数字图像,可能会学习一些基本概念,例如像素、分辨率、色彩空间和图像处理算法等。这可能涉及到使用编程语言(

    2024年02月11日
    浏览(53)
  • 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?

    在通过LearnOpenGL学习 OpenGL 知识的时候,有介绍如何通过Assimp来加载3D模型,并了解了Mesh网格的概念。 Assimp Mesh网格 3D模型 在 https://learnopengl-cn.github.io/03%20Model%20Loading/01%20Assimp/ 中有介绍使用 Assimp 库来加载 3D 模型 .obj 格式。 一个非常流行的模型导入库是Assimp,它是 Open Asse

    2024年02月05日
    浏览(41)
  • 猿创征文|Python-sklearn机器学习之旅:我的第一个机器学习实战项目

    目录 前言 一、从目的出发 1.导入数据 二、项目开启 1.导入数据

    2024年01月24日
    浏览(57)
  • GDAL OGR C++ API 学习之路 (5)OGRLayer篇 代码示例

    virtual  OGRStyleTable * GetStyleTable   ( ) 返回图层样式表 返回:  指向不应由调用方修改或释放的样式表的指针 virtual  void  SetStyleTableDirect (OGRStyleTable *poStyleTable  ) 设置图层样式表 参数: poStyleTable  -- 指向要设置的样式表的指针 Virtual  OGRErr  StartTransaction ( ) 对于支持事务的数

    2024年02月14日
    浏览(52)
  • C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解

    这个示例创建了一个主窗口,其中包含两个按钮。第一个按钮点击时会显示一个简单的消息框,第二个按钮点击时会执行一个特定的操作(在这个例子中,仅打印一条调试信息)。 功能描述: 创建窗口和布局: 使用 QWidget 和 QVBoxLayout 创建主窗口并设置垂直布局,将按钮放置

    2024年02月04日
    浏览(68)
  • C++学习之旅 - 指针

    指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 指针的定义与使用 指针的语法 数据类型* 指针变量名 指针占用的内存空间 我这里是8个字节的原因是我是64位电脑 你可以在 VSstudio 中更

    2024年02月08日
    浏览(40)
  • R语言 Error in make.names(col.names, unique = TRUE) : invalid multibyte string at ‘<b1><ea><cc><e2>‘

    R语言导入CSV文件的时候,代码如下: 出现以下报错: Error in make.names(col.names, unique = TRUE) : invalid multibyte string at \\\'b1eacce2\\\' 报错的解决方法如下: 报错的原因是,导入文件的编码格式不是read.csv()函数的默认格式。我们可以使用windows自带的“记事本/notepad”软件来查看格式,打

    2024年02月02日
    浏览(51)
  • 【C++历险记】国庆专辑---探索多态迷宫的代码之旅

    🎉博客主页:.小智 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++终极篇 🎉代码仓库:小智的代码仓库 多态多态顾名思义就是多种形态,比如我们要完成某一件事情,不同的对象去完成,我们产生的结果是不一样的。 举个栗子我们平时的买火车票,就有这几种分

    2024年02月08日
    浏览(39)
  • 【C++入门 一 】学习C++背景、开启C++奇妙之旅

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object orientedprogramming:面向对象)思想,支持面向对象的程序设计语言应运而生。

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包