cam*_*ino 21 c++ memory-management
Objective C引入了一项名为ARC的技术,使开发人员免于内存管理的负担.这听起来不错,我认为如果g ++也有这个功能,C++开发人员会非常高兴.
ARC允许您将内存管理的负担放在(Apple LLVM 3.0)编译器上,从不再考虑保留,释放和自动释放
所以,如果LLVM3.0可以做到这一点,我认为g ++也可以让C++开发人员摆脱内存管理的艰巨任务,对吧?
将ARC引入C++有什么困难吗?
我的意思是:如果我们不使用智能指针,我们只使用new/ new[],编译器是否可以为我们做些什么来防止内存泄漏?例如,自动将新指针更改为智能指针?
Alo*_*ave 21
C++具有资源分配的概念,即初始化(RAII)和智能使用此方法可以使您免于显式资源管理.
C++已经提供shared_ptr了提供引用计数的功能.
此外,还有许多其他智能指针使用RAII来使您的C++生活更轻松.
Jan*_*sky 17
这是一个很好的问题.ARC不仅仅是智能指针的实现.它也与垃圾收集不同,因为它确实可以让您完全控制内存管理.
在ARC中,您确切地知道何时将释放对象.人们认为是不正确的原因是,你写的没有明确的"释放"电话.但是你知道什么时候编译器会插入一个.并且它不是在一些垃圾收集步骤中,它是在不再需要对象时内联的.
它包含一个编译器步骤,用于分析代码并尝试查找递增和递减引用计数的任何冗余序列.这可能是通过优化C++编译器实现的,如果它被赋予了优化器可以看到的智能指针实现.
ARC还依赖于目标c的语义.首先,指针被注释为表示它们是强还是弱.这也可以在C++中完成,只需要有两个不同的指针类(或使用智能和香草指针).其次,它依赖于目标c方法的命名约定来知道它们的返回值是否应该隐式弱或强,这意味着它可以与非ARC代码一起工作(ARC需要知道你的非ARC代码是否打算返回一个对象例如,具有+1引用计数.如果您的"C ARC"没有与非"C ARC"代码并列,则您不需要这样做.
ARC给你的最后一件事是,在编译时,你的代码真的很好地分析了它认为泄漏的位置.这很难添加到C++代码中,但可以添加到C++编译器中.
没有必要.我们有共享指针,为我们这样做.实际上,我们有各种各样的指针类型用于各种不同的情况,但共享指针模仿ARC正在做的事情.
看到:
| 归档时间: |
|
| 查看次数: |
10691 次 |
| 最近记录: |