如何使用 ARC 删除 objective c 中的 C++ 指针

How to delete a c++ pointer in objective c with ARC

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

#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 还是没有必要这样做?

我建议通读这篇文章。他通过一些陷阱和一些典型的做法来帮助理解这一点:

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

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

ARC 不会自动计算 C++ 指针上的引用。您确实正确地实现了 dealloc,但您可能希望在调用 delete 之前检查以确保 world 不是 0