目前,我的Objective C类通过在创建所有者时执行new
并在销毁时调用delete
来使用C ++对象。但还有另一种方式吗?我希望能够声明一个auto_ptr
,其范围持续到Objective C类的生命周期。
答案 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发表评论。两者都使用智能引用计数指针(管理所有引用计数的指针,用于赋值等操作符)。