C++ 智能指针

server/2024/12/16 0:49:48/

 智能指针是针对内存泄漏的问题进行处理。

场景1

我们写一个模拟除法函数,调用一下。该函数会对除数为0的情况抛异常:

#include<iostream>
using namespace std;double chu(int a, int b)
{if (b == 0){throw invalid_argument("除数不能为0!");}else{return (double)a / b;}
}
void funb() 
{int* p = new int[10];int a = 0, b = 0; cin >> a >> b;cout << chu(a, b) << endl;delete[] p;cout << "deletc[]" << p << endl;
}int main()
{try{funb();}catch (const exception &e){cout << e.what() << endl;}return 0;
}

 抛异常不调用析构:

正常情况会释放:

 我们发现如果没有抛异常就程序最后释放(调用析构),如果抛异常了那么最后不会析构(不调用析构)。

那么如果遇到抛异常的情况,没有调用析构,最后可能会导致内存泄漏的问题。

这个时候就可以用聪明的指针来解决这个问题:

#include<iostream>
using namespace std;
class SmartPtr
{
public:SmartPtr(int* ptr):_ptr(ptr){}~SmartPtr(){delete[] _ptr;cout<<"delete[]"<< " "<< _ptr<<endl;}
private:int* _ptr;
};
double chu(int a, int b)
{if (b == 0){throw invalid_argument("除数不能为0!");}else{return (double)a / b;}
}
void funb() 
{int* p = new int[10];SmartPtr sp(p);int a = 0, b = 0; cin >> a >> b;cout << chu(a, b) << endl;//delete[] p;//cout << "deletc[]" << p << endl;
}int main()
{try{funb();}catch (const exception &e){cout << e.what() << endl;}return 0;
}

 


http://www.ppmy.cn/server/30442.html

相关文章

【Flask 系统教程 1】入门及配置

当你开始学习 Flask 时&#xff0c;了解如何进行基本的配置是非常重要的。Flask 是一个简单而灵活的 Python Web 框架&#xff0c;它允许你快速构建 Web 应用程序&#xff0c;并且易于学习。在这篇博客中&#xff0c;我将介绍如何从零开始进行 Flask 的基础配置&#xff0c;适合…

HTML_CSS学习:背景、鼠标相关属性

一、背景相关属性 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>背景相关属性</title><style>body{background-color: greenyellow;}div{width: 400px;height: …

有趣的 CSS 图标整合技术!sprites精灵图,css贴图定位

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

QT5之事件——包含提升控件

事件概述 信号就是事件的一种&#xff0c;事件由用户触发&#xff1b; 鼠标点击窗口&#xff0c;也可以检测到事件&#xff1b;产生事件后&#xff0c;传给事件处理&#xff0c;判断事件类型&#xff0c;后执行事件相应函数&#xff1b; 类似单片机的中断&#xff08;中断向量…

软件开发标准流程与软件工程基本理论

软件开发标准流程与软件工程基本理论 一、需求分析 软件开发需要&#xff0c;自用户提出开始&#xff0c;商业合作确定&#xff08;规范化&#xff1a;软件开发项目合同&#xff09;&#xff0c;进入软件工程开始阶段&#xff1a;需求分析。 软件项目Team负责需求分析开发人员…

数据仓库Data Warehouse

数据仓库Data Warehouse 数仓是一种思想,数仓是一种规范,数仓是一种解决方案 1. 数据处理方式 数据处理大致可以分成两大类: 联机事务处理OLTP(on-line transaction processing)联机分析处理OLAP(On-Line Analytical Processing)1.1. OLTP OLTP的全称是On-line Transa…

(学习日记)2024.04.25:UCOSIII第四十九节:User文件夹函数概览(APP和BSP)

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。 这…

SQL Server的基本操作示例

我可以为您提供一些SQL Server的基本操作示例。以下是增删改查的简单示例&#xff1a; 增加数据&#xff1a; INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3);示例&#xff1a; INSERT INTO Employees (FirstName, LastName, Age) VALUES (John, Doe, 30);删除数…