西安市政道桥建设公司网站,xampp可以做网站吗,免费python教程,永州静默管理c智能指针
手动管理内存很容易造成内存泄漏#xff0c;现代c的智能指针可以在很大程度上帮我们缓解这个问题#xff0c;降低我们的手动管理内存的心智负担#xff0c;智能指针有好几种#xff0c;比如shared_ptr、unique_ptr还有weak_ptr
共享指针shared_ptr
共享指针会…c智能指针
手动管理内存很容易造成内存泄漏现代c的智能指针可以在很大程度上帮我们缓解这个问题降低我们的手动管理内存的心智负担智能指针有好几种比如shared_ptr、unique_ptr还有weak_ptr
共享指针shared_ptr
共享指针会记录有多少个共享指针指向同一个物体当这个数字降为0的时候程序就会自动释放这个物体省去我们手动delete的烦恼要使用智能指针首先需要#includememory shared_ptrint p;p make_sharedint(100);//或者shared_ptrintp{make_sharedint(100)};
这段代码展示了我们如何定义一个智能指针以及初始化make_shared会动态分配一块内存创建对应的资源然后让它shared_ptr指向它它是一个模板可以接受一个类型和对应的初始化参数除了用make_shared还可以用new初始化shared_ptr shared_ptrint p {new int(100)};
更推荐使用shared_ptrintp{make_sharedint(100)};因为总体来说make_shared的效率更高。
shared_ptr怎么自动管理内存
例如用共享指针来管理Ball的创建与销毁 class Ball { public: Ball(){ cuotA ball appearsendl; } ~Ball(){ coutA ball disappearsendl; } void Bounce(){ coutA ball jumpsendl; } } int main() { shared_ptrBall p make_sharedBall(); coutp.use_cuont()endl; shared_ptrBallp2 p; coutp.use_count() p2.use_count()endl; shared_ptrBallp3 p; coutp.use_count() p2.use_count() p3.use_count()endl; p.reset(); p2.reset(); p3.reset(); } 运行结果 独享指针unique_ptr
unique_ptr特性 基于排他所有权模式两个指针不能指向同一个资源 无法进行左值unique_ptr复制构造也无法进行左值复制赋值操作但允许临时右值赋值构造和赋值 保存指向某个对象的指针当它本身离开作用域时会自动释放它指向的对象。 在容器中保存指针是安全的 使用方法 运行结果 weak_ptr
weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。 同时weak_ptr 没有重载*和-但可以使用 lock 获得一个可用的 shared_ptr 对象。 弱指针的使用 weak_ptr wpGirl_1; // 定义空的弱指针 weak_ptr wpGirl_2(spGirl); // 使用共享指针构造 wpGirl_1 spGirl; // 允许共享指针赋值给弱指针 弱指针也可以获得引用计数 wpGirl_1.use_count() 弱指针不支持 * 和 - 对指针的访问 在必要的使用可以转换成共享指针 lock()