unique

您所在的位置:网站首页 unique_ptr作为参数传递 unique

unique

2024-07-17 04:08| 来源: 网络整理| 查看: 265

1.从一个unique_ptr直接赋值给另一个unique_ptr是合法的,比如

ptr = std::unique_ptr(new ClassA)

但是下面的写法不对: ptr1=ptr2; 出处 Nicolai Josuttis 第二版,中文版 102页 2.但是将一个unique_ptr作为输入参数传给函数时,可以采用如下两种办法: 2-1)左值引用。在调用函数后,unique_ptr指针仍然占有指向的资源。

std::unique_ptr up(...); void func(std::unique_ptr &); ..... func(up);

2-2)

std::unique_ptr up(...); void func(classX &); ..... func(*up);

甚至还有一种右值引用的办法。采用这种办法,在调用函数后,unique_ptr指向的资源就被释放了

std::unique_ptr up(...); void func(std::unique_ptr ); ..... func(std::move(up));

出处 Nicolai Josuttis 第二版5.2节,中文版 102页 3.假如一个函数的返回值是unique_ptr,则在函数结尾直接写return unique_ptr;即可。如下:

std::unique_ptr func() { std::unique_ptr up(...); return up; }

调用这个函数时,理论上要在函数外面包括一个std::move:

std::unique_ptr up = std::move(func());

但是实际上,可以省去move函数,原因是c++11规定,编译器应自动尝试加上move. 出处 Nicolai Josuttis 第二版5.2节,中文版 103页 4.也可以用make_unique直接给unique_ptr赋值 5.对数组来说,假如unique_ptr的尖括号包括的类型是数组,则即使没有明确指明deleter,unique_ptr销毁时,数组仍会以delete []的方式释放。 假如尖括号包括的不是数组,但实际上unique_ptr管理的是数组,则应将一个能够释放数组的deleter分配给unique_ptr. c++11提供std::default_delete函数满足这个要求。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3