unique_ptr
左值右值
左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能出现在等号右边的变量(或表达式)。需要注意的是,左值是指表达式结束后依然存在的持久对象,而右值是指表达式结束时就不再存在的临时对象。T& 指向的是 lvalue,而 const T& 指向的,却可能是 lvalue 或 rvalue,左值引用&与右值引用&&(右值引用是c++11加上的)。
move和forward:
-
需要明确的是,move函数可以是用于构造函数,也可以用于赋值函数,但都需要手动显示添加。其实**move函数用直白点的话来说就是省去拷贝构造和赋值时中间的临时对象,**将资源的内存从一个对象移动到(共享也可以)另一个对象。
官话是:c++11 中的 move() 是这样一个函数,它接受一个参数,然后返回一个该参数对应的右值引用。 -
std::forward<T>(u)
有两个参数:T 与 u。当T为左值引用类型时,u将被转换为T类型的左值,否则u将被转换为T类型右值。如此定义std::forward
是为了在使用右值引用参数的函数模板中解决参数的完美转发问题。
意思就是:把右值的对象(right)移动给左值(_myt&),并且右值清空。
unique_ptr中的拷贝构造和赋值操作符delete了,所以也就意味着,他和auto_ptr有区别,控制权唯一,不能随意转换。用法都差不多
#include "stdafx.h"
#include <iostream>
#include <memory>
using namespace std;
class Base{
};
int _tmain(int argc, _TCHAR* argv[])
{
unique_ptr<Base> baseUnique(new Base);
cout