gpt4 book ai didi

shared-ptr - iPhone上Objective C++的std::tr1::shared_ptr?

转载 作者:行者123 更新时间:2023-12-04 06:49:38 28 4
gpt4 key购买 nike

我主要是 C++ 开发人员,最近我在编写 iPhone 应用程序。

iPhone 上的内存管理对我来说没问题,由于资源限制,鼓励使用引用计数器而不是深拷贝。

一件烦人的事情是我必须自己管理引用计数器:alloc 表示 counter = 1;保留意味着计数器++,释放意味着计数器--

我希望为 Cocoa Touch 编写一个类似 shared_ptr 的类,所以我很少需要自己手动操作引用计数器。

我怀疑是否有任何现有的代码,我想听听一些建议,今天是我开始学习 objective-c 的第 5 天

谢谢。

最佳答案

只要你先学习内存管理规则,shared_ptr没有真正的问题- 它可以在 C++ 上下文中为您提供帮助,但不会让所有权问题神奇地消失。shared_ptr支持自定义解除分配器,因此如下:

@interface A : NSObject
- (void)f;
@end

@implementation A
- (void)dealloc { NSLog(@"bye"); [super dealloc]; }
- (void)f { NSLog(@"moo"); }
@end

void my_dealloc(id p) {
[p release];
}

// ...
{
shared_ptr<A> p([[A alloc] init], my_dealloc);
[p.get() f];
}

...输出:

moo
bye



......正如预期的那样。

如果需要,您可以使用辅助函数对用户隐藏解除分配器,例如:
template<class T> shared_ptr<T> make_objc_ptr(T* t) {
return shared_ptr<T>(t, my_dealloc);
}

shared_ptr<A> p = make_objc_ptr<A>([[A alloc] init]);

关于shared-ptr - iPhone上Objective C++的std::tr1::shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308396/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com