前言对智能指针进行学习,并在下一篇博客中实现简单的智能指针。智能指针简介C++中使用对内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理;程序员自己管理对内存可以提高程序的效率,但是整体来说对内存的管理是麻烦的;据此引入了智能指针的概念:
智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。所以智能指针的作用原理就是在函数结束时自动释放内存空间
转载
2023-07-12 19:27:12
248阅读
1.智能指针的作用C++程序设计中需要频繁地动态分配堆内存,堆内存的申请和释放都由程序员管理。程序员管理堆内存提高了程序的效率,但是整体来说堆内存的管理非常麻烦,且容易造成动态分配的堆内存没有正确释放或无法释放,导致资源浪费,程序运行速度变慢等问题。为了解决这些问题C++11提出了智能指针的概念,方便管理内存。使用普通指针容易造成内存泄漏、二次释放、程序发生异常时内存泄漏等问题,使用智能指针可以更
转载
2023-06-09 13:46:13
81阅读
以下实现没有考虑线程安全的问题。智能指针:它的一种通用实现方法是采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。 每次创建类的新对象时,初始化指针并将引用计数置为1; 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;
转载
2023-08-28 19:39:01
83阅读
简介 智能指针就是对指针进行封装,使其提供特有的功能。 unique_ptr:封装了原始指针使其只能在同一时刻被同一对象拥有,并且在离开作用域时会自动销毁。 shared_ptr: 封装了原始指针,利用引用技术技术,实现多个对象同时共享一个指针,并且在所有对象都离开作用域时释放内存. weak_pt ...
转载
2021-07-18 22:53:00
858阅读
2评论
Smart Pointers - What, Why, Which? http://ootips.org/yonat/4dev/smart-pointers.htmlauto_ptr C++98中,智能指针通过一个模板类型auto_ptr实现,缺点:拷贝时返回一个左值,不能调用delete[](只能针对单个对象使用,不能针对数组使用),所以在C++11标志中被废弃了。 a
转载
2023-06-07 14:46:19
198阅读
智能指针:是存储指向动态分配对象指针的类。能够在适当的时间自动删除指向的对象。下面是它的三种实现://autoptr
template<class T>
class Autoptr
{
public:
Autoptr(T* ptr)
:_ptr(ptr)
{}
~Autoptr()
{
if(_ptr)
{
delete 
原创
2016-04-19 21:02:13
797阅读
智能指针是能够智能化的动态开辟空间和内存释放。C++中引入智能指针,是防止我们在动态开辟空间是,由于疏忽大意,导致内存的释放出现问题,最终致使内存泄漏。智能指针的基本特点:(1)智能指针管理的是一块内存的释放。(2)智能指针是一个类,有类似指针的功能。AutoPtr:#include<iostream>using namespace
原创
2016-04-25 11:09:30
585阅读
说起指针相信大家一定不陌生,那么智能指针呢?首先,我们来看看,为什么要有智能指针?例如void Test2 ()
{
int* p1 = new int(2);
bool isEnd = t
原创
2016-05-12 22:41:51
550阅读
unique_ptr独享被管理对象,同一时刻只能有一个unique_ptr拥有对象的所有权,当其被赋值时对象的所有权也发生转移,当其被销毁时被管理对象也自动被销毁 shared_ptr共享被管理对象,同一时刻可以有多个shared_ptr拥有对象的所有权,当最后一个shared_ptr对象销毁时,被
原创
2021-07-14 16:31:34
10000+阅读
#include <bits/stdc++.h> using namespace std; //智能指针 int main(){ //unique_ptr,保证同一时间内只有一个智能指针可以指向该对象 unique_ptr<string> p3(new string("auto")); unique ...
转载
2021-07-16 21:37:00
168阅读
2评论
C++中智能指针能够防止出现野指针、内存泄露等情况,智能指针的类中包括4个函数:构造函数、拷贝构造函数、重载复制操作符、析构函数。构造函数须要对引用计数和指针进行初始化,引用计数初始化为1,拷贝构造函数完毕对象之间的拷贝,要注意引用计数的变化和推断两个指针是否指向同样的内存。
重载复制操作符。须要推断的情况是左值代表的指针假设引用计数减为0。要释放对应的内存,避免发生内存泄露。析
转载
2016-01-10 12:30:00
117阅读
2评论
RAII 问题:申请资源使用释放资源 通常遗忘 内存泄漏 fd 使用对象的自动析构的方式,进行所申请资源的自动释放 auto_ptr 禁止隐式构造 允许拷贝构造 允许等号运算符 不能让多个智能指针指向同一块空间 不能用auto_ptr直接传参,否则会直接崩溃 传引用可以 显式构造带有类型 隐式的不带 ...
转载
2021-07-23 20:01:00
113阅读
2评论
1.reset的作用: reset() 相当于释放当前所控制的对象reset(T* p) 相当于释放当前所控制的对象,然后接管p所指的对象reset(T*, Deleter) 和上面一样 2.get: 获取对象指针
转载
2019-09-30 22:02:00
135阅读
2评论
1、头文件 #include <memory> 2、类型 auto_ptr share_ptr weak_ptr unique_ptr
转载
2019-03-05 11:16:00
59阅读
2评论
使用c++,除了c++的语法外,指针是我们面临的最的大一个问题,由于使用不当就会导致程序意外退出,或着内存的占用越来越多,总结起来这些错误由以下三个原因造成。 1 野指针:指针指向的内存已经被释放,但是我们还在使用该指针,或者还在使用之前指向的指针,此时程序会崩溃,也有可能导致已经释放的内存被重新分配给程序使用,造成意想不到的后果。
原创
2023-06-02 11:00:30
72阅读
RAII(Resource Acquisition Is Initialization):资源分配即初始化,定义封装一个类,用来实
转载
2022-09-02 14:24:45
101阅读
#include <iostream> using namespace std; template<class T> class SmartPtr{ public: explicit SmartPtr():ptr(nullptr), count(new int(0)){} explicit Smar
原创
2022-07-02 00:00:21
27阅读