文章目录
- 返回unique_ptr
- 指定删除器
- 尺寸问题
返回unique_ptr
unique_ptr<string> test()
{return unique_ptr<string>(new string("hello world"));// 我们知道在unique_ptr不能进行赋值, 或者使用其他的指针初始化, // 在这里创建了临时的对象, 所以会调用移动构造函数,可以实现赋值
}unique_ptr<string> pstr = test();
cout << *pstr << endl;
指定删除器
指定删除器的格式
// unique_ptr<指定的对象类型, 删除器> 智能指针变量名
void mydelete(string* str)
{delete str;str = nullptr;cout << "delete ok" << endl;
}
typedef void(*pf)(string*); // 定义一个函数指针类型, 类型名字叫fp// or using pf = void(*)(string*);// typedef decltype(mydelete)* pf;unique_ptr<string, pf> pstr_1(new string("C++ hello"), mydelete);
auto mydella = [](string* pstr){delete pstr;pstr = nullptr;cout << "delete ok" << endl;};unique_ptr < string, decltype(mydella)> pstr_1(new string("C++ hello"), mydella);
尺寸问题
通常情况下, unique_ptr的大小和裸指针的大小一样, 但是当指定了删除器之后, unique_ptr的指针的大小会随之而改变,
auto mydella = [](string* pstr){delete pstr;pstr = nullptr;cout << "delete ok" << endl;};unique_ptr < string, decltype(mydella)> pstr_1(new string("C++ hello"), mydella);cout << sizeof(pstr_1) << endl; // 8字节
所以对于unique_ptr来说, 指定了删除器可能会导致效率下降