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

大众服务器网站有wordpress模板安装教程视频

大众服务器网站,有wordpress模板安装教程视频,2023年8月新冠又来了,哪里设计网页便宜一、什么是智能指针 在使用堆内存时,就像使用栈内存空间一样,可以实现自释放的功能,智能指针在C库中也是类模板之一。 二、智能指针有几种 有四种。auto_ptr, unique_ptr, shared_ptr, weak_ptr 其中后三个是C11支持,第一个已经被…

一、什么是智能指针

        在使用堆内存时,就像使用栈内存空间一样,可以实现自释放的功能,智能指针在C++库中也是类模板之一。

二、智能指针有几种

        有四种。auto_ptr, unique_ptr, shared_ptr, weak_ptr 其中后三个是C++11支持,第一个已经被C++弃用且被unique_ptr 代替,不推荐使用。

        1、unique_ptr, 实现了独占式拥有的概念,同一个时间只能有一个智能指针可以指向该对象,因为无法进行拷贝构造和拷贝赋值,但是可以进行移动构造和移动赋值。

        2、share_ptr, 实现了共享式拥有的概念,即多个智能指针可以指向相同的对象,该对象及相关资源会在其所指对象不再使用之后,自己释放与对象相关的资源。

        3、weak_ptr, 解决share_ptr相互引用时,两个指针的引用计数永远不会下降为0,从而导致死锁问题。而weak_ptr 是对对象的一种弱引用,可以绑定share_ptr, 但不会增加对象的引用计数。

        4、atuo_ptr, 实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象;但atuo_ptr在C++17中被摒弃,其主要问题在于:对象所有权的转移,比如在函数传参过程中,对象所有权不会返还,从而存在潜在的内存崩溃问题;不能指向数组,也不能作为STL容器的成员。

三、智能指针的特点

        1、在C++库中也是类模板之一。

        2、实际上将指针封装在一个类,通过对象来管理指针。

        3、作用主要用来管理内存,在C++中,是一种管理资源,避免泄漏内存的习惯用法,也称RAII(资源获取及初始化)

四、案例

        1、auto_ptr的简单实现

#include <iostream>using namespace std;class Test1
{
private:int a;
public:Test1(int a = 0){cout << "Test1()" << endl;this->a = a;}~Test1(){cout << "~Test1()" << endl;}void show(){cout << "a = " << a << endl;}
};class Test2
{
private:int a;
public:Test2(int a = 0){cout << "Test2()" << endl;this->a = a;}~Test2(){cout << "~Test2()" << endl;}void show(){cout << "a = " << a << endl;}
};template <class T>
class myauto_ptr
{
private:T *ptr;
public:// 使用类模板的方式来适应多个类myauto_ptr(T *ptr = T ()){this->ptr = ptr;}~myauto_ptr(){delete ptr;     // 重点在这里cout << "~myauto_ptr" << endl;}// 重载成员函数, 让本类的指针成员变量可以调用T类对象的成员函数T* operator ->(){return ptr;}T& operator *(){return *ptr;}
};int main()
{Test1 *p1 = new Test1(10);// delete p1;   // 如果没有这步,会造成内存泄漏Test2 *p2 = new Test2(20);myauto_ptr<Test1> p3(new Test1(100));myauto_ptr<Test2> p4(new Test2(200));p3->show();(*p4).show();return 0;
}

        2、share_ptr的简单实现

#include <iostream>using namespace std;// 定义一个共享的全局变量,用来描述指向某个对象的指针个数
int share_count = 1;    class Test1
{
private:int a;
public:Test1(int a = 0){cout << "Test1()" << endl;this->a = a;}~Test1(){cout << "~Test1()" << endl;}void show(){cout << "a = " << a << endl;}
};template <class T>
class myshare_ptr
{
private:T *ptr;
public:// 使用类模板的方式来适应多个类myshare_ptr(T *ptr = T ()){this->ptr = ptr;}~myshare_ptr(){cout << "count :" << share_count-1 << endl;if(this->ptr != nullptr && --share_count == 0){delete ptr;     // 重点在这里}cout << "~myshare_ptr" << endl;}myshare_ptr(const myshare_ptr& other){this->ptr = other.ptr;share_count++;}T& operator = (const myshare_ptr& other){share_count++;this->ptr = other.ptr;return *this->ptr;}// 重载成员函数, 让本类的指针成员变量可以调用T类对象的成员函数T* operator ->(){return ptr;}T& operator *(){return *ptr;}
};int main()
{Test1 *p1 = new Test1(10);// delete p1;   // 如果没有这步,会造成内存泄漏myshare_ptr<Test1> p2(new Test1(100));myshare_ptr<Test1> p3 = p2;myshare_ptr<Test1> p4 = p2;p3->show();return 0;
}

五、总结

        本篇只是简单讲解一下四种智能指针,并简单实现了两个简单的案例,实际使用中还是用C++提供的智能指针。了解内部原理有助于正确使用。

http://www.sczhlp.com/news/104979/

相关文章:

  • 学院网站规划方案平面设计专业就业前景
  • 建设网站一定要电脑吗响应式网页设计是什么
  • 乌兰浩特网站开发查权重
  • 做一个网站成本是多少wordpress 微信付款
  • 网站后台管理系统图片中国空间站对接成功
  • 网站使用特殊字体苏州做网站建设公司
  • 网站上的二维码大庆商城网站建设
  • 二级域名网站有哪些优化网站的公司
  • 用凡科建设网站北京软件开发培训学校
  • h5响应式网站如何修改首页typecho 企业网站
  • 定远建设局网站驻马店市住房和城乡建设局网站
  • 吉林网站建设业务怎么制作有效网站
  • 织梦手机网站WordPress 云解析视频
  • 模板网站建设全过程wordpress 个人电脑
  • 网站开发与维护专业网站建设 网络科技公司
  • 如何介绍一个网站的促销功能提供网站建设公司
  • 网站建设佰首选金手指十六茂名seo顾问服务
  • 常州网站推广机构制作网站培训学校
  • 国外有名的网站如何汉化wordpress主题
  • 网站开发 报价单 表格c 网站开发需要什么软件
  • 免费建官方网站用手机怎么制作软件
  • 怎么自己弄网站大数据获客系统
  • 河北网站备案多久wordpress 上传目录权限设置密码
  • 百度热门关键词长春seo排名
  • 怀柔网站建设美容类 营销型网站
  • 合江县住房建设规划局网站网站开发运维
  • 网站建设设计公基于wordpress开发cms
  • 提供零基础网站建设教学培训微信群投票网站怎么做
  • 深圳龙华汽车站附近有做网站建设的iis网站视频无法播放
  • 太原做手机网站APP客户端网站建设