3. 类指针与智能指针

3. 类指针与智能指针

本篇主要解答以下问题:

  • 类的对象与类指针的区别
  • 为什么要用智能指针
  • unique_ptr 和 shared_ptr

3.1 类对象与类指针

实例化一个类的时候,有两种方式,一是创建对象,二是创建指针。以2.1中的student类为例子:

int main() {
    student s1;
    student *s2 = new student();
}

new 产生的类指针与直接例化一个对象主要有三点不同:

  • 内存空间与生命期不同

    二者的类型决定了它们在内存上的分布不同。一个是对象类型,在创建时就已为对象分配好内存空间,用的是内存栈,是个局部的临时变量,作用域在该函数体内,随函数的结束被释放。一个是指针类型,用的是内存堆,是个永久变量,在调用时需要先用new分配动态内存,用完后必须手动delete掉。如不想手动delete也可使用智能指针

  • 调用方式上的不同

    对象使用" . “操作符调用,而指针使用” -> "操作符调用。

  • 访问和传递的不同

    对象可直接访问,但不能实现多态,声明即调用了构造函数(已分配了内存);作为参数是,传递对象会调用拷贝构造函数,复制整个对象空间,参数传递占用资源大。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值