智能指针

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

智能指针

  • 在java中如果在堆上开辟内存是不需要手动释放的,我们叫做智能指针;但是在C++中如果用new在堆上开辟了空间,我们需要用delete进行手动释放,否则造成内存泄露。
  • 在C++中,已提供基于模板的智能指针操作,通过#include<memory>:
auto_ptr<int> ptr(new int); // int* ptr= new int;

auto_ptr其实是一个类, ptr定义了一个对象

  • 智能指针的实现:

class A
{
public:
	A(int a)
	{
		this->m_a = a;
		cout << "A()" << endl;
	}
	void Print()
	{
		cout << "a: " << m_a << endl;
	}

	~A()
	{
		cout << "~A()" << endl;
	}

private:
	int m_a;
};



template<class TYPE_>
class Auto_Ptr
{
public:
	Auto_Ptr(TYPE_* ptr)
	{
		m_ptr = ptr;
	}

	TYPE_* operator->()
	{
		return m_ptr;
	}

	TYPE_& operator*()
	{
		return *m_ptr;
	}

	~Auto_Ptr()
	{
		if (m_ptr != NULL)
		{
			delete m_ptr;
			m_ptr = NULL;
		}
	}
private:
	TYPE_* m_ptr;
};




int main()
{
	Auto_Ptr<A> my_ptr = new A(10);
	my_ptr->Print();   //  my_ptr.m_ptr ->Print();
	(*my_ptr).Print(); //(*my_ptr.m_ptr)->Print();
}     //main函数结束将自动触发 A的析构,不需要手动释放

待写

share_ptr

weak_ptr

xxxx

【C++】————智能指针 在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。c++中用的最多的是下面三种智能指针 阅读详情

相关推荐

C++智能指针以及我们为什么要使用智能指针

简单介绍两种智能指针,以及说明我们为什么要使用智能指针

dyamoo的博客 1524

智能指针【C++】

智能指针的作用: 堆内存的申请和释放都由程序员自己管理。 普通指针:需要程序员手动释放,容易造成内存泄漏(比如忘记手动释放,或者程序异常)和二次释放的问题。 智能指针:程序结束自己释放,不需要程序员手动释放。所以不存在内存泄漏 智能指针其实就是利用一种叫做RAII(资源获取即初始化)的技术对普通指针进行封装。所以智能指针的实质是个对象(模板类) 智能指针的作用是防止忘记调用delet...

大石头的博客 892

掌握C++新特性中智能指针的综合指南

本文是一篇关于C++中智能指针的综合指南,旨在深入探讨现代内存管理的核心概念和技术。智能指针是C++中一种强大的工具,可以帮助开发人员更安全、高效地管理内存资源。通过详细解析各种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr,读者将了解它们的原理、用法和适用场景。本文将重点介绍智能指针的优势,如自动内存释放、避免内存泄漏和循环引用等问题。此外,还将讨论智能指针与传统指针的区别,并提供一些最佳实践和实用技巧,帮助读者在实际项目中正确、高效地使用智能指针

Lion_Long的博客 1175

C++11动态内存与智能指针

一、动态内存 二、智能指针

灰太狼的小秘密 5629

C++基础:智能指针

在创建智能指针时,可以给对象指定一个删除器,当智能指针的引用计数为零时,会自动调用该删除器来释放对象的内存,比如我们用std::shared_ptr来管理动态数组,std::shared_ptr的默认删除器不支持删除数组对象,我们就可以指定删除器。std::shared_ptr使用引用计数来保证浅拷贝的内存释放问题,每一个shared_ptr的拷贝都会指向同一块内存,只有当最后一个shared_ptr拷贝析构的时候,才会将其指向的内存释放。相对于原始指针来说,智能指针不需要手动释放内存,其内存会自动释放

qq_73143395的博客 1432

智能指针释放

要按第二种方式释放,或者用m_record=NULL;代替m_record.Release(); 也行. 因为智能指针实际是一个指针类,所以: m_record.Release(); // 释放内部的接口指针,同时内部指针赋值为 NULL m_record->Release();// 错!!!一定不要这么使用,因为这个调用并不把内部指针清空,那么析构的时候会被再次释放释放了两次)

xiunai78的专栏 1508

【C++11】智能指针深度详解(什么是智能指针?为什么需要智能指针?如何使用智能指针?)

智能指针这个名词听着挺唬人,其实也没啥,无非就是会自动销毁new出来的对象,对于日常使用来说,还是挺方便的,毕竟C/C++可没有隔壁Java的垃圾回收机制GC,得自己清理垃圾,智能指针可以自动完成垃圾清理这个工作

weixin_45031801的博客 7493

【C++】智能指针

C++中的智能指针,重点讨论了其设计思路、使用场景及标准库中的实现。智能指针基于RAII(资源获取即初始化)原则,通过类的生命周期管理资源,确保资源在异常抛出时仍能正确释放,避免内存泄漏。标准库提供了多种智能指针,如auto_ptr(已弃用)、unique_ptr(独占资源)、shared_ptr(共享资源)和weak_ptr(解决循环引用问题)。shared_ptr通过引用计数管理资源,而weak_ptr则用于打破shared_ptr的循环引用,避免内存泄漏。此外,智能指针还支持删除器,允许自定

记录学习与成长 3173

【C++11】智能指针

早期在C语言中我们学习了指针,这个指针学起来真是一个头两个大,当然学习到了这里想必大家对指针就不在害怕了,为了填上C++的不足在C++11中就扩展了智能指针,难道智能指针就真的那么智能吗?⭐主体。

AAlykk的博客 1270

Qt 之 智能指针汇总

来源 还有其他一些,做了一些汇总和测试,就不全列了。 文章目录: 一、垂悬指针的问题 二、Qt中的智能指针        1、QPointer        2、QSharedPointer & QWeakPointer        3、QScopedPointer      &n

一个老菜鸟的学习分享 7557

QT中什么时候使用智能指针智能指针解决了什么

从使用的层面来讲,智能指针其实是对裸指针(普通指针)的类封装,这使得智能指针实质是一个对象,使用感觉就像一个指针。利用RAII(资源获取即初始化)技术来实现智能指针的特性。使用智能指针的目的,最主要的任务就是解决内存泄漏的问题。通过智能指针来执行垃圾回收的任务。智能指针的这种能力赋予了C++语言本身进行内存垃圾清理的实现。通俗的讲,智能指针就是帮你做了你忘记delete操作的工作。

开软古剑楠 4091

C++基础智能指针

独占智能指针会“拥有”它所指向的对象,某一时刻,只能有一个unique_ptr指向给定的对象,当该指针被销毁时,指向的对象也会随之释放。shared_ptr共享他指向的对象,多个共享指针可以指向(关联)相同的对象,在内部采用计数器机制来实现当新的shared_ptr与对象关联时,引用计数器增加1当shared_ptr超出作用域时,引用计数器减1,当引用计数器变为0时,则表示没有任何shared_ptr与对象关联,则释放该对象​class Testpublic://名字。

没有百宝袋的哆啦A梦的博客 2036

rust智能指针

特性引用 (&T 和 &mut T)智能指针(如 Box、Rc)所有权引用没有所有权,只是借用数据智能指针拥有数据的所有权内存管理不负责内存管理负责内存管理,通常有自动销毁机制生命周期有明确的生命周期生命周期取决于智能指针本身数据存储位置引用通常指向栈或堆上的数据智能指针通常分配堆上的内存操作只提供对数据的访问提供更多的操作功能,如引用计数、自动清理等线程安全不保证线程安全一些智能指针(如 Arc)是线程安全的MyBox(x)

喜欢打篮球的普通人 1776

[C++]智能指针用法

智能指针之间不能混用。weak_ptr要和shared_ptr搭配使用,不能单独使用weak_ptr。weak_ptr的lock()使用是要先调用lock()再调用expired()。调用lock()之后use_count+1。

FL1768317420的博客 2014

C++之智能指针

C++智能指针介绍

2302_81120572的博客 864

关于智能指针(更新中)

在Java中,其自带垃圾回收机制,但c++不同。c++必须释放掉分配的内存,否则会造成内存泄露。由此c++11引入了智能指针

ouyfg的博客 1107

智能指针总结

1.什么是智能指针智能指针是 C++ 中用于管理动态分配内存的工具,通过封装原始指针并利用 RAII(资源获取即初始化)机制,自动管理对象的生命周期,避免内存泄漏和悬垂指针问题。智能指针是 C++11 引入的现代化特性,定义在 <memory> 头文件中。2.C++为什么要引入智能指针?自动管理内存 避免内存...

qq_35485206的博客 1048
上一篇: 操作符重载
下一篇: 强化练习-string类的实现
zzyczzyc
博客等级 码龄11年 69粉丝 262原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值