pthread_join()和pthread_detach()的区别在于前者会使调用程序阻塞在这个地方,并且第二个参数会保存返回信息,后者只有一个参数线程号,不会阻塞,直接系统自动回收资源。
make_shared()的作用是用于在动态内存中分配并构造一个对象,同时返回一个管理该对象的std::shared_ptr。
使用make_shared的好处:如果是new出对象再用智能指针指向它会有隐患例如内存泄漏,而make_shared则保证了对象的创建和智能指针的管理是原子操作。
例如:std::shared_ptr<int> ptr(new int(42)); 和auto ptr=make_shared<int>(42)
使用shared_from_this()的原因是因为std::shared_ptr有个构造函数允许使用一个普通指针作为参数,如果使用上面那种写法,会导致这个返回的std::shared_ptr指向的是一块新的对象内存,改用下面那种写法就确保了返回的std::shared_ptr指向的是同一个对象,否则可能出现多次删除对象的问题。
std::shared_ptr<BadClass> getShared() {
return std::shared_ptr<BadClass>(this);
}
//改成这样:
std::shared_ptr<GoodClass> getShared() {
return shared_from_this();
}