首页 > 试题广场 >

shared_ptr 怎么知道跟它共享对象的指针释放了

[问答题]
shared_ptr 怎么知道跟它共享对象的指针释放了
shared_ptr 内部维护着一个引用计数器,用于记录有多少个 shared_ptr 共享同一个对象。每当创建一个新的 shared_ptr 对象时,该计数器就会加 1,当 shared_ptr 对象被销毁时,计数器就会减 1。当计数器的值变为 0 时,表示没有任何 shared_ptr 对象引用该对象,此时 shared_ptr 会自动释放该对象的内存。因此,当跟 shared_ptr 共享同一个对象的所有 shared_ptr 对象都被销毁时,shared_ptr 就会知道该对象的指针已经被释放了。这种机制可以避免内存泄漏和悬空指针等问题。
发表于 2023-07-24 20:58:53 回复(0)
引用计数,有新智能指针对象引用,计数+1,有智能指针结束生命周期,计数-1,计数为0时,表示所有共享对象的指针都已经释放。
发表于 2023-08-15 07:05:43 回复(0)
当堆空间对应的整形值为 0 时,即表明不再有对象使用它,该堆空间就会被释放掉。
发表于 2022-07-31 13:29:26 回复(0)
share_ptr 底层是采用引用计数的方式实现的,引用计数用于记录有多少个 shared_ptr 共享同一个对象。智能指针在申请堆内存空间的同时,会为其配备一个整形值(初始值为 1),每当有新share_ptr对象使用此堆内存时,该值 +1;反之,每当使用此堆内存的对象被释放时,该值减 1。当堆空间对应的整形值为 0 时,即表明不再有任何share_ptr对象使用它,该堆空间就会被释放掉。当最后一个指针过期时,才调用 delete。
发表于 2024-05-21 15:57:51 回复(0)
模板类的内部维护一个计数器,当实例化shared_ptr<>的时候,计数器初始被设置为1。如果,此对象被复制、赋值等,计数器就会加1。当shared_ptr对象被销毁的时候,计数器减1。当计数器的值为0的时候,表明没有对象使用它了,就把该堆的空间释放掉。
发表于 2023-11-11 16:39:58 回复(0)
share_ptr内部维护了一个引用计数的指针变量,每当有一个share_ptr指向该对象时,引用计数就会加一,反而减一,当share_ptr检测到这个引用计数为0的时候就会释放掉这个对象的指针
发表于 2023-09-14 10:41:00 回复(0)
引用计数器,当堆内存的对象被释放时,计数器就会减一,当计数器为0时说明该空间已经被完全释放
发表于 2023-07-10 17:50:49 回复(0)
shared指针内部有一个计数器,当计数器的引用数减一的时候,就说明有一个指向共享对象的指针被释放了。
发表于 2023-07-09 22:32:59 回复(0)
计数
发表于 2022-06-28 10:12:59 回复(1)