如何使用ARC删除目标c中的c ++指针

时间:2015-02-13 19:55:40

标签: objective-c interop objective-c++

我正在包装box2d库,我想在包装器解除分配时正确释放b2World指针。我的问题是,我应该覆盖目标c中的-dealloc方法,还是ARC自动解除分配c ++ *世界指针?

#import "World.h"
#import "Box2D.h"
@interface World()
@property b2World* world;

@end

@implementation World 
@synthesize world;

-(void) createWorld:(Vec2*) gravity{
    b2Vec2 g(gravity.x, gravity.y);
    world = new b2World(g);
}
-(void) dealloc{
    delete world;
    world = nil;
    NSString *temp = @"World DEALLOCATED!!";
    NSLog(@"%@", temp);
}

我是否正确实施 - (void)dealloc还是没有必要这样做?

2 个答案:

答案 0 :(得分:1)

我建议阅读这篇文章。他经历了一些陷阱和一些典型的实践来帮助理解这个:

http://coherent-labs.com/blog/objective-c-arc-gotchas/

基本上:似乎ARC只管理符合Obj-C引用计数结构的对象。 C ++对象没有使用Obj-C对象使用的相同分配方法分配,因此C ++对象没有引用计数,因此ARC不管理它们。

答案 1 :(得分:1)

ARC不会自动计算对c ++指针的引用。您确实正确实施了dealloc,但在调用world之前,您可能需要检查以确保0不是delete