美文网首页
一个懒加载Demo

一个懒加载Demo

作者: TimeMage | 来源:发表于2019-04-07 20:45 被阅读0次

什么是懒加载

当一个实例,生成时并未初始化,只有在调用行为后才会被初始化,即为懒加载

代码

//Student.cpp
#include<iostream>
#include<string>
#include<memory>
using namespace std;
class AbstractStudent{
    public:
    virtual string getName()=0;
    virtual void setName(string)=0;
};
typedef std::shared_ptr<AbstractStudent> Ptr;

class Student:public AbstractStudent{
    private:
    string name;
    
    public:
    Student(string name="") {
        this->name = name;
        cout<< "初始化Student:"+this->name+"成功"<<endl;
    }
    ~Student() {
        cout<< "销毁Student:"+name+"成功"<<endl;
    }
    virtual string getName() {
        return name;
    }
    virtual void setName(string name) {
        this->name = name;
    }
};
#include "Student.cpp"
#include <string>
class LazyInitializer{
    private:
    Ptr target;
    std::string param;
    
    public:
    LazyInitializer(std::string param="") {
        target.reset();
        this->param = param;
    }
    Ptr getStudent() {
        if(!target.get()) {
            target = make_shared<Student>(param);
        }
        return target;
    }
};
#include "LazyInitializer.cpp"
#include <string>
#include <iostream>
class StudentProxy: public AbstractStudent {
    private:
        LazyInitializer li;
    public:
        StudentProxy(LazyInitializer l) {
            li = l;
        }
        Ptr target() {
            return li.getStudent();
        }
        string getName() {
            return target()->getName();
        }
        void setName(string name) {
            target()->setName(name);
        }
};

int main() {
    Ptr p = make_shared<StudentProxy>(LazyInitializer("Ken"));
    std::cout<< "step 1\n";
    std::cout<< p->getName()<<std::endl;
    std::cout<< "step 2\n";
    return 0;
}

输出结果

step 1
初始化Student:Ken成功
Ken
step 2
销毁Student:Ken成功

相关文章

  • 一个懒加载Demo

    什么是懒加载 当一个实例,生成时并未初始化,只有在调用行为后才会被初始化,即为懒加载 代码 输出结果

  • android懒加载demo

    } } } 直接在自己的fragment里继承AutoLazyFragment可实现懒加载

  • Android:Fragment懒加载的实现以及自己的封装思路

    1.什么是fragment懒加载以及为什么要使用fragment懒加载。 先看下Demo实现的效果吧。大家对这种效...

  • Fragment的懒加载(转)

    1.什么是fragment懒加载以及为什么要使用fragment懒加载。 先看下Demo实现的效果吧。大家对这种效...

  • 懒加载和预加载

    懒加载和预加载 1. 懒加载 1. 什么是懒加载? 懒加载也就是延迟加载 当访问一个页面的时候,先把img元素或是...

  • lazy

    swift中是通过专门的关键字(lazy)来实现懒加载; 直接懒加载赋值 懒加载赋一个函数 懒加载赋一个闭包 1、...

  • swift学习09(懒加载)

    swift中是通过专门的关键字(lazy)来实现懒加载; 一、直接懒加载赋值 二、懒加载赋一个函数 三、懒加载赋一...

  • 懒加载

    宏式懒加载 定义一个懒加载的宏 使用

  • 懒加载终极版

    以下是本人写的懒加载demo,非常简单,供需要的朋友参考,不懂的地方欢迎留言。 一、什么是图片滚动加载?通俗的讲就...

  • AR-飞机随着相机移动

    初始化懒加载: 添加视图,运行会话: 添加飞机节点: 随着相机移动: demo 链接:https://github...

网友评论

      本文标题:一个懒加载Demo

      本文链接:https://www.haomeiwen.com/subject/nmreiqtx.html