new
目前,我的 Objective C 类通过在创建所有者时执行 a 并delete
在销毁时调用来使用 C++ 对象。但是还有其他方法吗?我希望能够声明一个auto_ptr
其范围持续到 Objective C 类的生命周期的持续时间。
3 回答
好的,让我假设您在 Mac 上使用 C++ 和 Objective-C,如果我是对的,您可能正在使用 X-code。因此,如果您转到项目的属性(信息)。您可以检查编译选项(GCC)。在那里,有一个选项可以启用 C++ 构造函数/析构函数(在 Cocoa 项目中默认关闭)。
然后你会得到类似默认的 C++ 作用域,但是我没有使用太多,而且我在使用大量模板代码 (Boost) 时遇到了问题。
此外,我认为除了一些在 GCC 上工作的好人之外,没有人正式支持这一点。所以我建议你对这样的任何东西进行单元测试,并注意任何事情都可能出错。
尽管如此,对于作为 C++ 人的我来说,能够在 Objective-C 中使用 C++ 是一种解脱,而且风险是值得的 :)
如果您对保留我们作为开发人员所剩无几的理智有丝毫希望,您就不会那样做。最好是delete
你的 C++ 对象。一般来说,虽然逐行混合 Objective-C 和 C++ 是安全的,但不要期望运行时支持做一些花哨的事情,比如混合生命周期。通常,当调用 obj-c 类的 dealloc 时,您可以安全地销毁对象,但除此之外,不要期望混合类范围并且不要哭泣。
在 Xcode 中,我正在阅读“The Objective-C Programming Language”,标题为“Using C++ With Objective-C”的部分。我没有尝试过,但它说您可以使用 C++ 类作为实例变量。它使用零参数构造函数来初始化任何属于 C++ 类的实例变量。在 dealloc 中,以相反的实例变量声明顺序调用析构函数。
我刚刚遇到OCPtr和Boost::shared_ptr with Cocoa的评论。两者都使用智能引用计数指针(为分配等运算符管理所有引用计数的指针)。