// DisguisedPtr<T> acts like pointer type T*, except the
<T>作用类似指针类型T*,
// stored value is disguised to hide it from tools like `leaks`.
只是将存储值隐藏起来,不让“ leaks”之类的工具看到。 leaks内存泄漏检测工具
// nil is disguised as itself so zero-filled memory works as expected,
nil被伪装成它自己,所以填满0的内存就像预期的那样工作
// which means 0x80..00 is also disguised as itself but we don't care.
这意味着0 x80 . .00也伪装成它自己,但我们不在乎。
// Note that weak_entry_t knows about this encoding.
注意weak_entry_t知道这种编码。
template <typename T>
class DisguisedPtr {
uintptr_t value;
static uintptr_t disguise(T* ptr) {
return -(uintptr_t)ptr;
}
static T* undisguise(uintptr_t val) {
return (T*)-val;
}
public:
DisguisedPtr() { }
DisguisedPtr(T* ptr)
: value(disguise(ptr)) { }
DisguisedPtr(const DisguisedPtr<T>& ptr)
: value(ptr.value) { }
DisguisedPtr<T>& operator = (T* rhs) {
value = disguise(rhs);
return *this;
}
DisguisedPtr<T>& operator = (const DisguisedPtr<T>& rhs) {
value = rhs.value;
return *this;
}
operator T* () const {
return undisguise(value);
}
T* operator -> () const {
return undisguise(value);
}
T& operator * () const {
return *undisguise(value);
}
T& operator [] (size_t i) const {
return undisguise(value)[i];
}
// pointer arithmetic operators omitted
// because we don't currently use them anywhere
};
iOS 关联对象 - DisguisedPtr
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 我们在 iOS 开发中经常需要使用分类(Category),为已经存在的类添加属性的需求,但是使用 @proper...
- 一.isa指针 上篇文章我们提到了实例对象,类对象和元类对象的存储结构里面都包含了一个isa指针,今天我们来看看它...
- #import"ViewController.h"//属性关联属于动态运行时#import//设置keyconst...
- 本文Demo传送门:AssociatedObjectDemo 摘要:编程,只了解原理不行,必须实战才能知道应用场景...