C++11新特性
智能指针是C++11引入的特性,用于解决忘记delete
而出现的内存泄露问题,是行为类似指针的类对象。
4种智能指针
C++有4种智能指针:auto_ptr、shared_ptr、unique_ptr、weak_ptr,其中auto_ptr在C++11中被弃用,weak_ptr需要配合shared_ptr使用,并不能算是真正的智能指针。
unique_ptr:代替了原有的auto_ptr,它们都采用所有权模式,实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。
shared_ptr:采用引用计数实现共享式拥有,多个共享指针可以指向同一个对象,该对象和其他相关资源会在最后一个引用被销毁的时候释放。
weak_ptr:只能和shared_ptr搭配使用,用来解决循环引用问题。
实现原理
智能指针将常规指针进行包装,当智能指针对象过期时,让它的析构函数对常规指针进行内存释放。
移动语义
左值和右值
一个表达式的计算结果要么是左值,要么是右值。左值是在内存中持久存储的,位于内存具体的某个地址上;右值只是一个临时存储的值。
- 如果一个表达式仅由一个变量名组成,那么它一定是左值。
- 函数表达式中的参数:在调用函数时,参数是存在寄存器里的,所以是右值
- 函数返回值:如果返回的是引用,那么是左值,其他情况返回的都是
移动构造
std::move函数
这个函数并没有移动任何东西!仅仅是做了一个类型转换,你甚至可以像下面这样简单地实现一个move函数:
1 | template <typename T> |