繁体   English   中英

从目标C使用C ++:如何分配/取消分配?

[英]Using C++ from Objective C : how to allocate/deallocate?

当前,我的Objective C类使用C ++对象,方法是在创建所有者时执行一个new ,并在销毁它时调用delete 但是还有另一种方法吗? 我希望能够声明一个auto_ptr其作用域将持续目标C类的生命周期。

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

然后,您会得到类似默认值的C ++作用域,但是我用的不多,而且模板代码过多(Boost)也遇到了问题。

另外,我认为除了在GCC上工作的一些好人之外,没有人正式支持这一点。 因此,我建议您对此类内容进行单元测试,并注意任何可能出错的地方。

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

如果您什至希望保留我们作为开发人员留下的一点点理智,那么您就不会这样做。 最好delete您的C ++对象。 通常,虽然可以逐行混合使用Objective-C和C ++是安全的,但不要指望运行时支持像混合生命周期这样的花哨的事情。 通常,可以在调用obj-c类的dealloc时安全地销毁对象,但除此之外,不要期望混合类作用域并且不要哭泣。

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

我刚遇到OCPtr,与Cocoa一起评论Boost :: shared_ptr 两者都使用一个智能的引用计数指针(一个指针,该指针为您管理所有引用计数以进行分配等运算符)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM