智能指针
定义
- 智能指针是类模板,在栈上创建智能指针对象
- 把普通指针交给普通指针对象
- 智能指针对象过期时,调用析构函数释放普通指针的内存
new 返回的是对象的地址 ,通过赋值语句创建对象一般用的是拷贝构造函数
智能指针unique_ptr(有explicit关键字修饰构造函数,不能通过赋值语句创建智能指针对象,故而通过函数参数传递时,只能用函数指针的引用传递)
该指针独享它指向的对象
A* a = new A("gml");
//unique_ptr<A> pu1(a);//也可以用
unique_ptr<A> pu1(new A("jhx")); //推荐使用
cout << a->name << endl;
cout << (*a).name << endl;
cout << pu1->name << endl;
cout << (*pu1).name << endl;
get()方法返回裸指针(不负责)
release()方法释放对原始指针的控制权(负责)
move()方法可以转移对原始指针的控制权(负责)
仿函数(用作回调函数)一般用结构体实现?
shared——ptr(该指针共享它指向的对象)
//仿函数式的删除器
struct deleteclass
{
void operator()(A* a)
{
cout << "自定义删除器(仿函数)" << endl;
delete a;
}
};
int main()
{
A* a = new A("gml");
//shared_ptr<A> pu (a,deleteFfunc);
shared_ptr<A> pu(a, deleteclass());
}
运行结果:
weak_ptr
weak_ptr不控制对象的生命周期,但是能判断对象是否还活着
用lock()函数可以将其提升为shared_ptr,如果对象还活着,返回有效的shared_ptr; 如果死了,则提升会失败,返回一个空的shared_ptr
提升的行为(lock())是线程安全的