28得票4回答
为什么我的弱引用在强引用消失之后就被清除了?

我有点固执,但我想要很好地理解弱引用和强引用,这就是为什么我再次向你请教的原因。 考虑以下情况:__weak NSString* mySecondPointer = myText; NSLog(@"myText: %@", myText); 结果是myText:(null),这很显然——...

28得票2回答
.NET 中的弱引用实现

我理解并欣赏.NET框架中System.WeakReference类的实用性,但是对其具体实现方式感到好奇。 .NET中如何实现弱引用(WeakReference)?MSDN详细讨论了使用弱引用的方法,但我没有看到有关其内部工作原理的详细信息。 CLR如何跟踪引用、在目标被收集时知道将内部...

25得票2回答
Rc或Arc有一个操作能够克隆底层值并将其返回给调用者吗?

我正在寻找类似于take的原子操作,具体如下: impl<T: Clone> for Arc<T> { fn take(mut self) -> T { Arc::make_mut(&mut self); Arc:...

25得票13回答
如何在使用shared_ptr时检测循环引用

shared_ptr是Boost库中的引用计数智能指针。 引用计数的问题在于它不能处理循环依赖。我在想如何通过C++来解决这个问题。 请不要提出像“不要创建循环”或“使用weak_ptr”之类的建议。 编辑 我不喜欢那些只是建议使用weak_ptr的答案,因为显然,如果你知道你将创建一个循环,...

24得票5回答
原子引用计数

我想确切地了解线程安全的原子引用计数是如何工作的,例如像std::shared_ptr一样。我的意思是,基本概念很简单,但我真的很困惑如何通过decref加上delete来避免竞态条件。 这个Boost教程演示了如何使用Boost原子库(或C++11原子库)实现原子线程安全的引用计数系统。#...

23得票1回答
为什么Python会对False和True进行引用计数?

我在查看内置函数hasattr的源代码时,注意到了几行引起了我的兴趣:Py_INCREF(Py_False); return Py_False; ... Py_INCREF(Py_True); return Py_True; Py_False和Py_True不是全局值吗?仅出于好奇,为什么...

22得票1回答
WinRT有垃圾回收吗?

WinRT有垃圾回收吗? 还是像COM一样采用引用计数?

22得票1回答
初始化属性,点符号表示法

在我的init方法中,使用点符号将retain属性初始化为nil是不好的想法吗? 对于任何普通的属性,例如:@property (nonatomic, retain) id foo; 假设在我的init方法中我设置了self.foo = nil。合成的方法首先会释放或自动释放foo(不确定其...

22得票5回答
std::shared_ptr中的最大引用计数是多少?如果尝试超过它会发生什么?

如果我们假设std::shared_ptr存储一个引用计数(我知道标准并没有要求,但是我不知道有哪些实现没有这样做),那么该引用计数将具有有限数量的位,这意味着支持的最大引用数存在限制。这引出了两个问题: 这个最大值是多少? 如果你尝试超过它会发生什么(例如,通过复制一个指向具有最大引用计...

21得票7回答
如何在C++中实现线程安全的引用计数

如何在C++编程语言中实现一个高效且线程安全的引用计数系统? 我经常遇到一个问题,即关键操作不是原子的,而且可用的X86互锁操作不足以实现引用计数系统。 下面的文章涵盖了这个主题,但需要特殊的CPU指令: http://www.ddj.com/architect/184401888