zoukankan      html  css  js  c++  java
  • 建立实例化对象

    #include<iostream>
    #include<string>
    
    using String = std::string;
    
    class Entity
    {
    private:
        String m_Name;
    public:
        Entity()
            :m_Name("Unknow"){}
        Entity(const String& name)
            :m_Name(name){}
        const String& GetName() const
        {
            return m_Name;
        }
    };
    
    int main()
    {
        Entity entity;//使用栈内存建立,不同的方法初始化
        Entity entity1("Wangtn");
        Entity entity2 = Entity("WTN");
        std::cout << entity.GetName() << std::endl;
    
    
        std::cin.get();
    }

    如果我们在主函数外写一个函数,用同样的方式(堆栈)新建实例化对象

    void Print()
    {
        Entity e;
        std::cout << e.GetName() << std::endl;
    }

    那么当我们跳出这个函数,e也将不再存在,生命周期结束。如果我们在主函数中这么写

    int main()
    {
        Entity *e0;
        {
            Entity entity;//使用栈内存建立,不同的方法初始化
            Entity entity1("Wangtn");
            Entity entity2 = Entity("WTN");
            e0 = &entity;
            std::cout << entity.GetName() << std::endl;
        }
    
        std::cin.get();
    }

    通过设置断点可以查看到,在大括号内时,e0指向如图

     

     

     运行到第二个断点发现这个实例已经不存在了,因此我们需要用堆来创建他们,而且栈的空间相对较小,在创建较大的实例时一般采用栈

    使用堆来创建实例的话数据类型应该改下,要使用指针类型。这一过程是new在堆上申请空间来存放这个新的实例,然后通过指针返回这个申请的内存的地址

    int main()
    {
        Entity *e0;
        {
            Entity* entity1=new Entity("Wangtn");//使用堆新建实例
            e0= entity1;
            std::cout << (*entity1).GetName() << std::endl;
        }
        std::cin.get();
    }

    使用new新建实例后一定要手动将他删除,因为在c++中,程序不能自动释放

    delete entity1;

  • 相关阅读:
    Intellij Idea 2017创建web项目及tomcat部署实战
    使用docker安装mysql服务
    python2--升级python3
    SpringCloud--注册中心Eureka
    SpringBoot--属性加载顺序
    Jmeter--压测dubbo接口
    较快的maven的settings.xml文件
    Spring boot:logback文件配置
    Spring--AOP
    34组代码敲不队记账类app会议纪要
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12752828.html
Copyright © 2011-2022 走看看