使用Objective C中的C ++:如何分配/解除分配?

时间:2008-11-12 10:52:41

标签: c++ objective-c object scope auto-ptr

目前,我的Objective C类通过在创建所有者时执行new并在销毁时调用delete来使用C ++对象。但还有另一种方式吗?我希望能够声明一个auto_ptr,其范围持续到Objective C类的生命周期。

3 个答案:

答案 0 :(得分:3)

好吧,我假设您在Mac上使用C ++和Objective-C,如果我是对的,您可能正在使用X代码。因此,如果您转到项目的属性(信息)。您可以检查编译选项(GCC)。在那里,有一个选项可以启用C ++构造函数/析构函数(在Cocoa项目中默认关闭)。

然后你得到类似默认的C ++范围,但是我没有用太多,而且我遇到了大量模板代码(Boost)的问题。

除了一些在GCC工作的好人之外,我认为没有人能正式支持这一点。所以我建议你对这样的事情进行单元测试,并注意一切都可能出错。

尽管能够在Objective-C中使用C ++,对于我来说,作为一个C ++人员,是一种解脱,风险是值得的好处:)

答案 1 :(得分:1)

如果你有一丝希望保留我们作为开发人员所留下的一点点理智,你就不会这样做。最好delete你的C ++对象。一般来说,尽管在逐行的基础上混合使用Objective-C和C ++是安全的,但是不要指望运行时支持像混合生命周期那样花哨的东西。通常,当你调用obj-c类的dealloc时,你可以安全地销毁你的对象,但除此之外,不要期望混合类范围而不是哭。

答案 2 :(得分:0)

在Xcode中,我正在阅读“Objective-C编程语言”,标题为“使用带有Objective-C的C ++”一节。我没有尝试过,但它说可以使用C ++类作为实例变量。它使用零参数构造函数初始化任何C ++类的实例变量。在dealloc中,析构函数以反向实例变量声明顺序调用。

我刚遇到OCPtr并对Boost::shared_ptr with Cocoa发表评论。两者都使用智能引用计数指针(管理所有引用计数的指针,用于赋值等操作符)。