3. 类指针与智能指针
本篇主要解答以下问题:
- 类的对象与类指针的区别
- 为什么要用智能指针
- unique_ptr 和 shared_ptr
3.1 类对象与类指针
实例化一个类的时候,有两种方式,一是创建对象,二是创建指针。以2.1中的student类为例子:
int main() {
student s1;
student *s2 = new student();
}
new 产生的类指针与直接例化一个对象主要有三点不同:
-
内存空间与生命期不同
二者的类型决定了它们在内存上的分布不同。一个是对象类型,在创建时就已为对象分配好内存空间,用的是内存栈,是个局部的临时变量,作用域在该函数体内,随函数的结束被释放。一个是指针类型,用的是内存堆,是个永久变量,在调用时需要先用new分配动态内存,用完后必须手动delete掉。如不想手动delete也可使用智能指针。
-
调用方式上的不同
对象使用" . “操作符调用,而指针使用” -> "操作符调用。
-
访问和传递的不同
对象可直接访问,但不能实现多态,声明即调用了构造函数(已分配了内存);作为参数是,传递对象会调用拷贝构造函数,复制整个对象空间,参数传递占用资源大。