当前位置: 首页 > news >正文

嵌入式C++总结

1、new delete与malloc free区别

        new delete是运算符,malloc free是函数。

        前者不需要传入大小,后者需要。

        前者会调用构造、析构函数,后者不会。

        前者不需要强制转换,后者需要。

2、智能指针

        智能指针是避免忘记释放动态申请对象容易内存泄漏而设计的。主要特点是会在离开作用域会使用delete进行内存释放。实现原理也就是在构造函数中new对象,析构函数中delete对象。智能指针有share_ptr、auto_ptr、unique_ptr、weak_ptr。

auto_ptr,当使用拷贝或赋值构造函数时会将右值赋值给左值后将右值指针置零,局限性就在复制后不能使用。

unique_ptr,在auto_ptr的基础上直接禁用赋值和拷贝构造函数,这样从根本上解决了问题,但是赋值时会比较麻烦。

其中shared_ptr中有一个引用计数,用于记录多少个对象指向申请内存,析构这些对象时计数值减1,为0时候再释放动态内存。避免了重复释放的问题。但是会引出循环引用的问题:创建出来的两个对象通过shared_ptr相互指的时候析构时由于被别的对象指向所以计数值不为0,导致无法调用析构函数释放内存。解决办法是创建时使用shared_ptr,引用时使用weak_ptr。

shared_ptr实现原理(理解基本原理,细节没有处理):

#include <iostream>
#include <memory>using namespace std;class boy;
class girl;template<typename T>class my_shared_ptr
{public:my_shared_ptr(T *a){ref_cnt = 1;Type_Ptr = a;}my_shared_ptr(T &a){ref_cnt = 1;Type_Ptr = &a;}my_shared_ptr(){ref_cnt = 1;Type_Ptr = NULL;}void Release(){if(Type_Ptr&&((--ref_cnt) == 0)){delete Type_Ptr;Type_Ptr = NULL;}}~my_shared_ptr(){Release();}T* operator->(){return Type_Ptr;}T& operator*(){return *Type_Ptr;}my_shared_ptr& operator=(my_shared_ptr &target){if(this != &target){Release();Type_Ptr = target.Type_Ptr;ref_cnt = target.ref_cnt;target.Ref_Add();}return *this;}void Ref_Add(){ref_cnt++;}private:T *Type_Ptr;int ref_cnt;
};// 男孩类
class boy {
public:boy() { cout << "boy structure" << endl; }~boy() { cout << "~boy destruct"  << endl; }void set_girl_friend(my_shared_ptr<girl>& g) {girl_friend = g;}private:my_shared_ptr<girl> girl_friend; 
};// 女孩类
class girl {
public:girl() { cout << "girl structure" << endl; }~girl() { cout << "~girl destruct" << endl; }void set_boy_friend(my_shared_ptr<boy>& b) {boy_friend = b;}private:my_shared_ptr<boy> boy_friend;
};// 测试函数
void test() {// 定义共享指针,初始化指向新建的girl女孩类my_shared_ptr<girl> sp_girl(new girl());	// 定义共享指针,初始化指向新建的boy男孩类my_shared_ptr<boy> sp_boy (new boy());// 调用 sp_girl 指向 girl 的成员函数 set_boy_friend // 将 sp_boy 共享指针作为参数传递进成员函数sp_girl->set_boy_friend(sp_boy);// 调用 sp_boy 指向 boy 的成员函数 set_girl_friend// 将 sp_girl共享指针作为参数传递进成员函数sp_boy->set_girl_friend(sp_girl);
}int main(void) {// 调用测试函数test();return 0;
}

weak_ptr,不能改变引用计数,只能观察对象,不能直接使用*和->访问对象,需要通过lock()获得一个指向共享对象的shared_ptr,然后操作该共享指针。

相关文章:

嵌入式C++总结

1、new delete与malloc free区别 new delete是运算符&#xff0c;malloc free是函数。 前者不需要传入大小&#xff0c;后者需要。 前者会调用构造、析构函数&#xff0c;后者不会。 前者不需要强制转换&#xff0c;后者需要。 2、智能指针 智能指针是避免忘记释放动态申请对象…...

C语言之内存函数篇(3)

目录 memcpy memcpy的使用 memcpy的模拟实现 NO1. NO2. memcpy可否实现重叠空间的拷贝 my_memcpy memcpy memmove memmove memmove 分析 代码 memset memset的使用 memcmp memcmp的使用 <0 0 >0 今天我们继续介绍几个重要的内存操作函数。&…...

java面试题-学成在线项目

1、详细说说你的项目吧 从以下几个方面进行项目介绍&#xff1a; 1、项目的背景&#xff0c;包括&#xff1a;是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说…...

ViewBinding——Android之视图绑定

高版本的gradle不再支持 kotlin-android-extensions插件&#xff0c;因此view的绑定方式也有所改变。 1.启用视图绑定 android {...viewBinding {enabled true}} 如果想在生成绑定类时忽略某个布局文件&#xff0c;请将 tools:viewBindingIgnore"true" 属性添加到…...

vue学习-04vue的props配置项和mixin混入

今天仍然就是敲vue的一个demo&#xff0c;vue的props配置项和mixin混入 props配置项 Vue.js 中的 props 是用于在父组件向子组件传递数据的配置项。通过 props&#xff0c;你可以将父组件中的数据传递给子组件&#xff0c;并在子组件中使用这些数据。以下是关于 props 配置项…...

九、多项式朴素贝叶斯算法(Multinomial NB,Multinomial Naive Bayes)(有监督学习)

Multinomial Naive Bayes&#xff1a;用于多项式模型的Naive Bayes分类器 一、算法思路 多项式Naive Bayes分类器适用于离散特征分类&#xff08;如文本分类中的字数&#xff09; 多叉分布通常需要整数特征计数 不过&#xff0c;在实际应用中&#xff0c;分数计数&#xff08…...

数据结构上机练习——单链表的基本操作、头文件、类定义、main函数、多种链表算法的实现,含注释

文章目录 单链表的基本操作实现1.头文件2.类定义和多种算法的实现2.1创建空表2.2头插法创建n个元素的线性链表2.3一个带头节点的链表存放一组整数&#xff0c;设计一个算法删除值等于x的所有节点。2.4计算线性表中值为偶数的节点个数2.5一个带头节点的单链表heada存放一组整数&…...

如何通过AI视频智能分析技术,构建着装规范检测/工装穿戴检测系统?

众所周知&#xff0c;规范着装在很多场景中起着重要的作用。违规着装极易增加安全隐患&#xff0c;并且引发安全事故和质量问题&#xff0c;例如&#xff0c;在化工工厂中&#xff0c;倘若员工没有穿戴符合要求的特殊防护服和安全鞋&#xff0c;将有极大可能受到有害物质的侵害…...

C语言自定义类型(上)

大家好&#xff0c;我们又见面了&#xff0c;这一次我们来学习一些C语言有关于自定义类型的结构。 目录 1.结构体 2位段 1.结构体 前面我们已经学习了一些有关于结构体的知识&#xff0c;现在我们进行深入的学习有关于它的知识。 结构是一些值的集合&#xff0c;这些值称为…...

Python - 小玩意 - 圣诞树背景音乐弹窗

import turtle as t import tkinter as tk import pygame import random as r import threading import time# 初始化背景音乐 def initialize_music():file r"./music/周杰伦-蜗牛.mp3"pygame.mixer.init()pygame.mixer.music.load(file)pygame.mixer.music.play()…...

The 2023 ICPC Asia Regionals Online Contest (1) E. Magical Pair(数论 欧拉函数)

题目 T(T<10)组样例&#xff0c;每次给出一个n(2<n<1e18)&#xff0c; 询问多少对&#xff0c;满足 答案对998244353取模&#xff0c;保证n-1不是998244353倍数 思路来源 OEIS、SSerxhs、官方题解 2023 ICPC 网络赛 第一场简要题解 - 知乎 题解 官方题解还没有…...

<十三>objectARX开发:模拟实现CAD的移动Move命令

一、目的 实现类似于CAD的移动命令,选择对象,移动到指定位置,移动过程中对象跟随鼠标移动。效果如下: 二、关键步骤 选择对象,打开实体判断类型:acedEntSel()、acdbOpenObject()、isKindOf()。指定基点:acedGetPoint()。移动模型,追踪光标移动对象实体:acedGrRead()…...

Autosar基础:模式管理-EcuM

ECUM目录 前言一、ECUM状态机二、Fixed和Flexible模式的区别与联系三、状态详解3.1.Startup3.2.UP3.3.RUN3.4.Sleep3.5.Shutdown三、EcuM唤醒源3.1 CAN Trcv唤醒3.2 唤醒后操作前言 根据Autosar对于模式管理的需求定义,模式管理有以下模块: ①ECU State Manager(EcuM):管理…...

代码随想录Day42 | 01背包问题| 416. 分割等和子集

01背包问题&#xff08;Acwing&#xff09; 有 N 件物品和一个容量是 V的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入…...

UML六大关系总结

UML六大关系有&#xff1a;继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。 1、继承 继承&#xff08;Inheritance&#xff09;&#xff1a;表示类之间的继承关系&#xff0c;子类继承父类的属性和方法&#xff0c;并可以添加自己的扩展。 继承&#x…...

ElementUI基本介绍及登录注册案例演示

目录 前言 一.简介 二.优缺点 三.Element完成登录注册 1. 环境配置及前端演示 1.1 安装Element-UI模块 1.2 安装axios和qs(发送get请求和post请求) 1.3 导入依赖 2 页面布局 2.1组件与界面 3.方法实现功能数据交互 3.1 通过方法进行页面跳转 3.2 axios发送get请求 …...

Python爬虫-某网酒店评论数据

前言 本文是该专栏的第6篇,后面会持续分享python爬虫案例干货,记得关注。 本文以某网的酒店数据为例,采集对应酒店的评论数据。具体思路和方法跟着笔者直接往下看正文详细内容。(附带完整代码) 注意:本文的案例“数据集”,选用的是本专栏上一篇“Python爬虫-某网酒店数…...

C# Onnx Yolov8 Detect 水果识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…...

测试网页调用本地可执行程序(续1:解析参数中的中文编码)

学习测试网页调用本地可执行程序还遗留一个问题&#xff0c;即网页中调用带中文参数的命令时&#xff0c;本地可执行程序接收到的参数字符串里的中文都转换成了编码模式&#xff0c;看起来如下所示&#xff1a; <a href TestPageCall:-a你好>启动测试程序</a><…...

C++入门知识

Hello&#xff0c;今天我们分享一些关于C入门的知识&#xff0c;看完至少让你为后面的类和对象有一定的基础&#xff0c;所以在讲类和对象的时候&#xff0c;我们需要来了解一些关于C入门的知识。 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对…...

亚马逊德国站VAT发票自动筛选:手把手教你用浏览器控制台JS代码搞定(附Edge/Chrome/Firefox全版本)

亚马逊德国站VAT发票智能筛选&#xff1a;浏览器控制台JS代码实战指南 每次月底处理税务发票时&#xff0c;跨境电商卖家们是否总被海量的PDF文件淹没&#xff1f;特别是亚马逊德国站的卖家&#xff0c;面对后台密密麻麻的发票列表&#xff0c;手动筛选符合特定税号条件的文件不…...

构建一个抗揍的 Go TCP 聊天服务:异常兜底与防御性编程实践

构建一个抗揍的 Go TCP 聊天服务&#xff1a;异常兜底与防御性编程实践 在用 Go 实现一个简单的 TCP 聊天室时&#xff0c;实现“上线、下线、广播、私聊”等功能并不难。但如果要把它放到公网&#xff0c;面对真实网络环境中的网络抖动、恶意攻击&#xff08;如超长消息洪水、…...

Redis RDB Tools错误排查终极指南:10个常见问题与解决方案清单

Redis RDB Tools错误排查终极指南&#xff1a;10个常见问题与解决方案清单 【免费下载链接】redis-rdb-tools Parse Redis dump.rdb files, Analyze Memory, and Export Data to JSON 项目地址: https://gitcode.com/gh_mirrors/re/redis-rdb-tools Redis RDB Tools是解…...

从零开始掌握DAO、DTO、DO等模型对象:开发中的核心概念解析

1. 为什么需要这么多对象模型&#xff1f; 刚入行的时候&#xff0c;我也被各种O搞晕过。DAO、DTO、DO、VO...这些看起来差不多的缩写&#xff0c;到底有什么区别&#xff1f;为什么不能用一个对象搞定所有事情&#xff1f;直到有次在项目里把所有数据都用Map传递&#xff0c;结…...

Win11 23H2任务栏Copilot图标消失?别慌,一个注册表文件+两步设置帮你永久找回

Win11 23H2任务栏Copilot图标长效修复指南&#xff1a;从临时解决到永久生效 最近不少升级到Windows 11 23H2版本的用户发现&#xff0c;原本出现在任务栏右侧的Copilot图标突然消失了。这个问题看似小&#xff0c;却让依赖Copilot快速访问AI助手的用户感到不便。更令人困扰的是…...

3步打造零成本游戏手柄解决方案 - 用Joy-Con模拟Xbox控制器的高效实践

3步打造零成本游戏手柄解决方案 - 用Joy-Con模拟Xbox控制器的高效实践 【免费下载链接】XJoy 项目地址: https://gitcode.com/gh_mirrors/xjo/XJoy 场景化问题&#xff1a;当你的游戏缺少合适手柄时 你是否遇到过这种情况&#xff1a;想在PC上畅玩3A大作&#xff0c;却…...

ReTerraForged终极指南:如何在Minecraft 1.20+中打造专业级真实地形

ReTerraForged终极指南&#xff1a;如何在Minecraft 1.20中打造专业级真实地形 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged ReTerraForged作为Minecraft 1.…...

《被讨厌的勇气》自我救赎入门之书

一直觉得&#xff0c;人这一生&#xff0c;最难的功课是与自己和解&#xff0c;是挣脱他人的眼光&#xff0c;活成真实的自己。而我这份觉醒&#xff0c;始于一本心理学入门书——《被讨厌的勇气》。很多人困在人际关系的枷锁里&#xff0c;活得小心翼翼、疲惫不堪。习惯了迎合…...

【Hot 100 刷题计划】 LeetCode 42. 接雨水 | C++ 动态规划与双指针题解

LeetCode 42. 接雨水 | C 动态规划与双指针双解法题解 &#x1f4cc; 题目描述 题目级别&#xff1a;困难 (Hard) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1: 输入&#xff1a;height [0,1,…...

终极解决方案:高效构建个人数字图书馆的免费小说下载器

终极解决方案&#xff1a;高效构建个人数字图书馆的免费小说下载器 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader novel-downloader是一款功能强大的通用型小说下载器&#xff0c;让…...