Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by struct Date
【C++ 】智能指针:内存管理的 “自动导航仪”
目录 1、RAII 2、boost库 3、unique_ptr 4、shared_ptr 5、weak_ptr std::unique_ptr std::shared_ptr std::weak_ptr 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家 点击跳转到网站 一、引入 首先通过一个使用场景来引入智能指针,如下: class HF { public: HF(int a, int b) :_a(a) ,_b(b) { cout << "HF(int a, int b)" << endl; } ; ~HF() { cout << "~HF()" << endl; } private: int _a = 0; int _b = 1; }; void fun() { HF* h1 = new HF(1, 1); HF* h2 = new HF(1, 1); HF* h3 = new HF(1, 1); delete h1; delete h2; delete h3; } int main() { try { fun(); } catch...
【智能指针】-- 我与C++的不解之缘(三十三)
一、智能指针的使用 还记得,在异常学习的时候,我们分析出了一个问题 double Divide(int x, int y) { if (y == 0) { throw string("the y is zero"); } return (double)x / double(y); } void test(int x, int y) { int* arr = new int[10]; Divide(x, y); delete[] arr; cout << "delete[] arr" << endl; } int main() { while (1) { int x, y; cin >> x >> y; try { test(x, y); } catch (const string& str) { cout << str << endl; } catch (...) { cout << "unknown exception" << endl; } } return 0; }...
LLVM Cpu0 新后端6-CSDN博客
想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?pwd=vd6s 提取码: vd6s 之前的章节只实现了 int 和 32 位的 long 类型数据,这一章会新增一些更复杂的数据类型,比如 char, bool, short, long long,还会增加结构体,浮点,和向量类型。这一部分内容相对比较简单,其实这些类型也都是标准语言都支持的类型,所以 LLVM 自身已经实现了很大一部分功能,只要我们的后端不那么奇怪,就很容易填补缺失的内容。 目录 1.3 Cpu0InstrInfo.td 2.4 short 2.8 向量 一、修改的文件 在SelectAddr接口内增加对于基址+常量偏移这种地址形式的处理,对于全局基址加常量偏移的情况,提取其基址和偏移。。 有关于对 bool 类型的处理,这里增加了一些对 i1 类型 Promote 的合法化描述,告诉 LLVM 在遇到对 i1...
智能指针(C++)-CSDN博客
目录 3.1、RALL 3.3.1、auto_ptr 3.3.2、unique_ptr 3.3.3、shared_ptr 3.2.4、weak_ptr 一、智能指针是什么 在c++中,动态内存的管理式通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的指针,我们可以选择对对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。动态内存的使用很容易出现问题,因为确保在正确的时间释放内存是极其困难的。有时使用完对象后,忘记释放内存,造成内存泄漏的问题。 所谓的智能指针本质就是一个类模板,它可以创建任意的类型的指针对象,当智能指针对象使用完后,对象就会自动调用析构函数去释放该指针所指向的空间。 下面是智能指针的基本框架,所有的智能指针类模板中都需要包含一个指针对象,构造函数和析构函数。 二、为什么需要智能指针 异常的重新抛出的场景: void File() { string filename; cin >> filename; FILE* fout = fopen(filename.c_str(), "r"); if...
C++智能指针详解-阿里云开发者社区
一、智能指针概念 智能指针是存储指向动态分配(堆)对象指针的类。除了能够在适当的时间自动删除指向的对象外,他们的工作机制很像C++的内置指针。智能指针在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象。他们也可以用于跟踪被多用户共享的动态分配对象。 二、为什么需要智能指针 下面我们先分析一下下面这段程序有没有什么内存方面的问题? 关于内存泄漏见文章【C++ 内存管理】 三、智能指针设计原理剖析 RAII(Resource Acquisition Is Initialization),也称为 “资源获取就是初始化” ,是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。RAII是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对象析构的时候释放资源。这种做法有两大好处: 不需要显式地释放资源。...
智能指针介绍(C++)_小羊byte的博客-CSDN博客
前言 关于智能指针大家或多或少都有听说过,因为在C++中没有GC,所以存在很多内存泄露的风险,所以基于RAII思想设计出了,智能指针,智能指针经过了很多个版本的迭代,从刚开始在C++98中推出了auto_ptr,但是auto_ptr不好用,它的设计存在重大缺陷,又因为C++的官方库更新的很慢,所以在接下来的n年中,没有改进,但是有一群大佬绝大C++库太简陋了,所以就自己搞了一个非官方的社区,写了一个库叫做boost,它里面重新写了智能指针。(boost库里面还有很多的其它东西),scoped_ptr/scoped防拷贝版本。shared_ptr/shared_ptr引用计数版本。weak_ptr-为了解决shared_ptr循环引用的问题。之后在C++11中官方引入了智能指针,参考boost的实现,稍微进行改进,其实C++11其它类似于右值引用移动语义等也是参考boost。unique_ptr:防拷贝版本,shared_ptr引用计数版本,weak_ptr解决shared_ptr循环引用的问题。 目录 详见内存泄露的危害 2.1RAII RAII(Resource...
【C++】智能指针(RAII)详解_Ggggggtm的博客-CSDN博客
我们在上篇文章中(异常处理详解)提到了 RAII 。那么本篇文章会对此进行详解。重点是智能指针的详解。其中会讲解到 RAII 思想、auto_ptr、unique_ptr、shared_ptr、weak_ptr、循环引用问题。希望本篇文章会对你有所帮助。 文章目录 2、3 auto_ptr 2、5 shared_ptr 3、1 weak_ptr 🙋♂️ 作者:@Ggggggtm 🙋♂️ 👀 专栏:C++ 👀 💥 标题:智能指针 💥 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️ 我们先看如下一段代码: int div() { int a, b; cin >> a >> b; if (b == 0) throw invalid_argument("除0错误"); return a / b; } void Func() { // 1、如果p1这里new 抛异常会如何? // 2、如果p2这里new 抛异常会如何? // 3、如果div调用这里又会抛异常会如何? int* p1 = new int; int* p2 = new int; cout <<...
C++结构体初始化方法_c++ 结构体初始化_hhhcbw的博客-CSDN博客
#include <bits/stdc++.h> using namespace std; struct Date { int year; double month; string day; }; int main() { Date date1; date1.year = 2022; date1.month = 7.0; date1.day = "22"; cout<<date1.year<<" "<<date1.month<<" "<<date1.day<<endl; Date date2 = {2022, 7.0, "22"}; cout<<date2.year<<" "<<date2.month<<" "<<date2.day<<endl; return 0; } 如果只是想全部初始化为 0 可以按照如下方法 #include <bits/stdc++.h> using namespace std; struct Date { int year; double month; string day; }; int main() { Date date1 = {};...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with struct
Contact struct, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack