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

定制小程序开发公司seo优化教程自学

定制小程序开发公司,seo优化教程自学,做网站的语言叫什么,英语网站建设策划书智能指针 使用new在堆区动态分配内存时,需要delete释放否则会导致内存泄漏,所以采用智能指针即将动态创建时的指针传入,然后通过智能指针的析构函数delete即可释放资源,通过RAII技术确保内存被正确释放,有效防止内存泄…

智能指针

  • 使用new在堆区动态分配内存时,需要delete释放否则会导致内存泄漏,所以采用智能指针即将动态创建时的指针传入,然后通过智能指针的析构函数delete即可释放资源,通过RAII技术确保内存被正确释放,有效防止内存泄漏。
  • 智能指针实际上是类对象,重载了类如->、*等指针常用的运算符,只是表现形式像指针
  • C++11摒弃auto_ptr并新增提供了三种智能指针unique_ptr、shared_ptr、weak_ptr, 其作用和使用详见 C++11新特性 第4点
  • 示例-手动实现简单的智能指针类来管理动态创建的对象
#include<iostream>
#include<string>
using namespace std;//类模板-智能指针类
template<typename CLASSNAME>
class SmartPoint {
public:SmartPoint() {this->m_ptr = nullptr;}SmartPoint(CLASSNAME *ptr) {this->m_ptr = ptr;}// 禁止拷贝构造和拷贝赋值SmartPoint(const SmartPoint&) = delete;SmartPoint& operator=(const SmartPoint&) = delete;//RAII机制释放资源~SmartPoint() {if (this->m_ptr != nullptr) {cout<<"use ~SmartPoint()"<<endl;delete this->m_ptr;this->m_ptr = nullptr;}}// 移动构造函数SmartPoint(SmartPoint&& other) noexcept : m_ptr(other.m_ptr) {//初始化列表不允许用this,直接使用成员变量即可other.m_ptr = nullptr;  // 确保原对象不再拥有资源}// 移动赋值运算符SmartPoint& operator=(SmartPoint&& other) noexcept {if (this != &other) {delete this->m_ptr;       // 释放当前资源this->m_ptr = other.m_ptr;other.m_ptr = nullptr;}return *this;}explicit operator bool() const { return this->m_ptr != nullptr; }CLASSNAME* operator->() const{//重载->if (!this->m_ptr) {throw std::runtime_error("Attempt to dereference null pointer");}return this->m_ptr;}CLASSNAME& operator*() const{//重载*if (!this->m_ptr) {throw std::runtime_error("Attempt to dereference null pointer");}return *(this->m_ptr);}CLASSNAME* get() const { return this->m_ptr; } CLASSNAME* release() noexcept{ CLASSNAME* ptr = this->m_ptr;this->m_ptr = nullptr;return ptr;}const CLASSNAME* release() const noexcept = delete;  // 禁止const对象releasevoid set(CLASSNAME* ptr) {if (this->m_ptr != ptr) {CLASSNAME* old = this->m_ptr;this->m_ptr = ptr;  // 先设置新指针delete old;         // 再删除旧指针}}private:CLASSNAME* m_ptr;//内部维护指针
};//父类
template<typename NAMETYPE,typename AGETYPE>
class Person {
public:Person(NAMETYPE name, AGETYPE age) {this->m_Name = name;this->m_Age = age;}virtual ~Person() = default;//确保子类资源释放virtual void show() {cout << this->m_Age<<"--" << this->m_Name << endl;}NAMETYPE m_Name;AGETYPE m_Age;
};//子类
template<typename NAMETYPE, typename AGETYPE>
class Son :public Person<NAMETYPE, AGETYPE> {
public:Son(NAMETYPE name, AGETYPE age) :Person<NAMETYPE,AGETYPE>(name, age) {//调用父类有参构造}~Son(){cout<<"use 	~Son()"<<endl;}void show() override {//确保重写cout << this->m_Name<<"--" << this->m_Age << endl;}
};int main() {//通过有参构造使用Person<string,int>* p1 = new Person<string, int>("Tom", 22);SmartPoint<Person<string,int>> sp1(p1);sp1->show();Person<string, int>* p2 = new Son<string, int>("JERRY", 22);SmartPoint<Person<string, int>> sp2(p2);sp2->show();//调用get、set使用SmartPoint<Person<string, int>> sp3;Person<string, int>* p3 = new Son<string, int>("Tom-Mom", 44);sp3.set(p3);sp3.get()->show();//测试releaseauto rawPtr = sp3.release();//模仿移动语义rawPtr->show();delete rawPtr;// 测试移动语义-RAII机制仅释放两次SmartPoint<Person<string, int>> sp4 = std::move(sp1);if (!sp1) cout << "sp1 is empty after move"<<endl;sp4->show();return 0;
}
http://www.dtcms.com/wzjs/28990.html

相关文章:

  • 菠菜网站开发csjylw网络推广外包公司
  • 网站建设贝尔利个人免费推广网站
  • 安徽网站开发公司百度爱采购关键词优化
  • 竞拍网站做烂了怎么注册自己的网站域名
  • ps做网站首页的尺寸杨谦教授编的营销课程
  • 国内做彩票网站违法么24小时自助下单平台网站便宜
  • 做网站知识点提升seo搜索排名
  • 网站运行环境配置国外网站推广公司
  • 建立什么网站赚钱百度高级搜索指令
  • 网站建设做的人多吗北京百度seo排名
  • 视觉中国网站福州短视频seo方法
  • 外贸网站建设是什么关键词提取
  • 门户网站的建设公司外贸网站seo
  • 新开发的网站怎么做测试网络广告策划案
  • 北京网络网站建设公司桌面百度
  • 郑州七彩网站建设公司 评论百度推广账户优化方案
  • 网站程序 制作国际新闻最新消息十条
  • 湖北省建设厅信息网站seo美式
  • 做传奇网站云服务器地域改选哪里最佳的资源搜索引擎
  • 上海网站建设流国内前10电商代运营公司
  • 沈阳网站优化建设网络整合营销方案
  • 商务网站建设目的百度快照优化
  • 哪些企业必须用网站东莞seo培训
  • 网站建设推荐书籍电子商务网站建设多少钱
  • wordpress带下载功能seo网络推广专员招聘
  • 做海报免费素材网站有哪些自动优化app
  • 共享互助医疗网站建设成人短期就业培训班
  • 网站如何做搜索引擎优化百度快速收录接口
  • 专业做图片制作网站线上宣传方案
  • 网站维护要多久时间深圳网站建设