智能指针 unique_ptr

unique_ptr 不共享它的指针。它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。

1、不能进行复制构造和赋值操作(unique_ptr不支持拷贝操作,可以从函数中返回一个unique_ptr)
2、无法进行移动构造和移动赋值操作(std::move())
3、支持数组
4、std::make_unique从c++14开始
class A
{
    int data_;
public:
    A(int data_1,int data_2){
        data_=data_1+data_2;
    }

    ~A() {
        std::cout<<__FUNCTION__<<":"<<data_<<std::endl;
    }

    void print() {
        std::cout<<__FUNCTION__<<":"<<data_<<std::endl;
    }
};

void func()
{
    {
        std::unique_ptr<A[]> uptr_A(new A[3]{{1,2},{3,4},{5,6}});
        for(int i=0;i<3;i++) {
            uptr_A[i].print();
        }
    }
    
    std::unique_ptr<int[]> uptr_int(new int[3]{1,2,3});
    for(int i=0;i<3;i++) {
        std::cout<<uptr_int[i]<<std::endl;
    }
}

int main(int argc,char* argv[])
{
	func();
}
posted @ 2019-05-28 10:27  JohnRed  阅读(140)  评论(0编辑  收藏  举报