C++自学笔记19(new)

上一章笔记中我们用到了在堆上初始化对象。

#include <iostream>
#include <string>
class Entity 
{
private:
    std::string m_name;
 
public:
    Entity():m_name("nothing"){}
    Entity (const std::string& name):m_name(name){}
 
    const std::string& GetName()const
    {
        return m_name;
    }
};
int main()
{
    int a = 2;
    int* a = new int[50];

    Entity* e1 = new Entity("shaojie");
    std::cout<<(*e1).GetName()<<std::endl;
    delete e1;
    std::cin.get();

}

 我们关心main函数中int a = 2;在栈上对a赋值为2,再分配1MB或者2MB的数据时大小都没有什么问题。特点就是函数花括号结束 a就立刻释放。

int* a = new int[50]

int*因为new返回的是指针,new意味着找到一处4*50字节的内存并返回其地址给a。堆上分配有更大的内存空间,并且不受花括号作用域的影响。

在c语言中malloc表示对函数分配内存,以下两行近似等效。计算大小再分配内存再返回指针。

Entity* e1 = new Entity("shaojie");
Entity* e1 = (Entity*)malloc(sizeof(Entity));

 有什么区别呢?new里我们调用了Entity(),我们在完成以上功能时,还调用了Entity构造函数。这就是他们的区别。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少杰是小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值