是否可以引入自动引用计数(ARC)到C ++?
Objective C引入了一种名为ARC的技术,使开发人员免于内存管理的负担。 这听起来不错,我认为如果g ++也有这个功能,C ++开发人员会很开心。
ARC允许您将内存管理的负担放在(Apple LLVM 3.0)编译器上,并且永远不会考虑保留,释放和自动释放
所以,如果LLVM3.0可以做到这一点,我认为g ++也可以让C ++开发人员免于内存管理这些艰巨的工作,对吧?
将ARC引入C ++有什么困难吗?
我的意思是:如果我们不使用智能指针,我们只使用new
/ new[]
,编译器可以为我们做些什么来防止内存泄漏? 例如,自动将新建更改为智能指针?
C ++具有资源分配初始化(RAII)的概念, 并且这种方法的智能使用可以让您免除显式资源管理。
C ++已经提供了提供引用计数的shared_ptr
。
此外,还有其他一些智能指针 ,它们使用RAII来让您的生活更轻松。
这是一个很好的问题。 ARC不仅仅是智能指针的实现。 它也不同于垃圾收集,因为它可以让你完全控制内存管理。
在ARC中,您确切知道对象何时将被释放。 人们认为的原因是不正确的,因为你没有明确的“释放”电话。 但是你知道编译器何时会插入一个。 它不是在一些垃圾收集步骤中,当不再需要对象时它是内联的。
它包含一个编译器步骤,用于分析代码并尝试查找任何递增和递减引用计数的冗余序列。 这可能可以通过优化C ++编译器来实现,如果它被给予优化器可以看透的智能指针实现。
ARC还依赖于目标c的语义。 首先,指针被标注以说明它们是强还是弱。 这也可以在C ++中完成,只需要有两个不同的指针类(或使用智能指针和香草指针)。 其次,它依赖于客观c方法的命名约定,以了解它们的返回值是否应该隐含弱或强,这意味着它可以与非ARC代码一起工作(ARC需要知道您的非ARC代码是否打算返回对象例如+1参考计数)。 如果你的“C ARC”不与非“C ARC”代码并列,你就不需要这个。
ARC给你的最后一件事是,在编译时你的代码真的能很好地分析它认为泄漏的位置。 这很难添加到C ++代码中,但可以添加到C ++编译器中。
没有必要。 我们有共同的指针,为我们做到这一点。 实际上,我们针对各种不同的情况提供了一系列指针类型,但共享指针模拟了ARC正在做的事情。
看到:
的std :: shared_ptr的<>
升压:: shared_ptr的<>
链接地址: http://www.djcxy.com/p/40655.html上一篇: Is it possible to introduce Automatic Reference Counting (ARC) to C++?