返回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来说, 指定了删除器可能会导致效率下降