尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【C++14算法】make_unique

【C++14算法】make_unique
📅 发布时间:2026/6/20 3:43:38

1. 前言
在C++14标准中引入了一系列方便而强大的函数模板,旨在简化和改进代码的编写和可读性。其中之一是std::make_unique函数模板,它提供了一种更安全和方便的方式来创建和管理动态分配对象。本文将介绍std::make_unique的作用,它是如何使用的,以及四个示例代码来展示其实际应用。
2. 什么是make_unique?
make_unique是C++14引入的一个函数模板,用于创建并返回一个指向动态分配对象的unique_ptr智能指针。它是为了简化代码,避免手动使用new和delete,以及确保资源的正确释放而设计的。
3. 如何使用make_unique?
使用make_unique非常简单,并且遵循以下步骤:

(1)包含头文件 #include 。

(2)调用make_unique函数模板,并传入要创建对象的类型和构造对象所需的参数。
3.1 make_unique的函数原型如下:

点击查看代码
template< class T, class... Args >
std::unique_ptr<T> make_unique( Args&&... args );
其中,T代表指向动态对象的指针类型,Args代表构造对象时传递的参数类型,而args则是实际的构造参数。

3.2 示例代码

示例1:
创建一个动态分配的整数对象

点击查看代码
#include <iostream>
#include <memory>
int main() {std::unique_ptr<int> ptr = std::make_unique<int>(42);std::cout << "Value: " << *ptr << std::endl;return 0;
}
输出:

Value: 42

**示例2: **
创建一个动态分配的自定义类型对象

点击查看代码
#include <iostream>
#include <memory>
struct Point {int x;int y;Point(int x, int y) : x(x), y(y) {}
};
int main() {std::unique_ptr<Point> ptr = std::make_unique<Point>(10, 20);std::cout << "Point: (" << ptr->x << ", " << ptr->y << ")" << std::endl;return 0;
}
输出:

Point: (10, 20)
示例3: 创建一个动态分配的数组对象

点击查看代码
#include <iostream>
#include <memory>
int main() {std::size_t size = 5;std::unique_ptr<int[]> ptr = std::make_unique<int[]>(size);for (std::size_t i = 0; i < size; ++i) {ptr[i] = i + 1;}std::cout << "Array: ";for (std::size_t i = 0; i < size; ++i) {std::cout << ptr[i] << " ";}std::cout << std::endl;return 0;
}
输出:

Array: 1 2 3 4 5

示例4: 创建一个动态分配的自定义类对象数组

点击查看代码
#include<iostream>
#include<memory>
class MyClass {
public://补充默认构造函数MyClass() :value_(0) {std::cout << "Default Constructor called" << std::endl;}MyClass(int value) :value_(value) {std::cout << "Constructor called with value:" << value_ << std::endl;}~MyClass() {std::cout << "Destructor called with value: " << value_ << std::endl;}void PrintValue() const {std::cout << "Value: " << value_ << std::endl;}
private:int value_;
};
int main() {std::size_t size = 3;std::unique_ptr<MyClass[]> ptr = std::make_unique<MyClass[]>(size);for (std::size_t i = 0; i < size; ++i){//定位new,在已分配的内存上构造对象new(&ptr[i])MyClass(10);}for (std::size_t i = 0; i < size; ++i){ptr[i].PrintValue();}return 0;
}
输出:
点击查看代码
Default Constructor called
Default Constructor called
Default Constructor called
Constructor called with value:10
Constructor called with value:10
Constructor called with value:10
Value: 10
Value: 10
Value: 10
Destructor called with value: 10
Destructor called with value: 10
Destructor called with value: 10

相关新闻

  • 深入理解连接错误:从 “ld returned 1“到系统性解决方案
  • 深度残差网络在智能垃圾分类中的技术实践与性能分析
  • Vue2如何设计大文件上传的交互界面与用户体验?

最新新闻

  • 2026银川2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 字节跳动拟购5万颗AI芯片,国产GPU竞争聚焦生态、成本与产能
  • 基于深度学习的糖尿病视网膜病变自动检测系统构建实战
  • Obsidian MCL布局:模块化CSS让你的笔记排版焕然一新
  • 逆向工程实战:从加密音乐文件到通用音频格式的转换原理
  • NGA论坛优化摸鱼体验:免费开源脚本让你的论坛浏览效率提升300%

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号