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;

  • 相关阅读:
    SAP 标准成本滚算小记
    记一次SAP新业务开发项目
    让人头疼的关键用户
    SAP GUI个性化设置
    惊心动魄的SAP S4客户额度调整运动
    最新.net和Java调用SAP RFC中间件下载
    那些年我遇到的ERP顾问
    【SAP业务模式】之STO(二):系统配置
    SAP S4系统创建Customer和Vendor的BAPI
    【SAP S/4 1511之变】:主数据之变
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12752828.html
Copyright © 2011-2022 走看看