我对这个习语的感觉是它很有用,因为它确保在使用它们的对象超出范围之后释放资源。
换句话说,它更多的是关于 de-acquisition 和 de-initialisation ,那么为什么这个成语会被命名为它?
答案 0 :(得分:10)
首先,我应该注意到它被广泛认为是一个名不见经传的成语。许多人更喜欢SBRM,它代表Stack Bound Resource Management。虽然我(勉强)同意使用“RAII”只是因为它广为人知并使用,但我确实认为SBRM可以更好地描述真实意图。
其次,当RAII是新的时,它同样适用于收购,即释放资源。特别是,当时看到初始化分两步发生是相当普遍的。您首先定义一个对象,然后才动态分配与该对象关联的任何资源。许多样式指南提倡这一点,主要是因为当时(在C ++有异常处理之前)没有好的方法来处理构造函数中的失败。因此,样式指南经常说,构造函数应该只做最少的工作,特别是避免任何可能失败的东西 - 特别是分配资源(还有一些仍然会说这样的东西)。
相当多的人已经在析构函数中处理了释放资源,所以这与以前的做法没有明显区别。