allocator,分配内存但不进行任何初始化,很少用
shared_ptr 共享指针,初始化后同指针一样指向一个对象,成员函数use_count() 表示有多少共享指针指向对象,每当shared_ptr被赋值、拷贝的时候,use_count()加1,一个共享指针不再指向对象时,use_count减1。以这种方式构造的,指向同一个对象的指针,use_count是共享的。
不要使用同一个对象初始化多个共享指针。一个对象只能初始化一个共享指针。其成员函数get()可返回对象类型的指针,也不要用这个指针初始化其他共享指针。
(如果这样做了,会出现两个共享指针指向同一个对象,但计数都为1。一个共享指针已经释放对象时,另一个共享指针的use_count()并不会减少,仍表示该对象存在)
unique_ptr 唯一指针,同一时刻只能有一个unique_ptr指向对象。显然unique_ptr是无法赋值和拷贝的,可以用move移交对象。函数unique_ptr.release()释放对对象的引用,返回对象的指针。
weak_ptr 弱指针,可以被weak_ptr和shared_ptr赋值,但不会增加计数,对对象只读,当对象被释放后,weak_ptr被置为nulllptr。可用lock()得到对象的shared_ptr,如果对象已经释放,返回一个空的shared_ptr。expired()检查对象是否释放
onwer_before(ptr),判断this和ptr是否指向同一对象,比如this指向类,ptr指向类的成员。
addressof(ptr),获取ptr所指对象的实际地址,感觉是专门为重载了&符号的对象设计的。