为什么RAII如此命名?

Tol*_*ayi 8 raii

我对这个习语的感觉是它很有用,因为它确保在使用它们的对象超出范围之后释放资源.

换句话说,它更多的是关于去除去初始化,那么为什么这个成语被命名为它的方式呢?

Jer*_*fin 11

首先,我应该注意到它被广泛认为是一个名不见经传的成语.许多人更喜欢SBRM,它代表Stack Bound Resource Management.虽然我(勉强)同意使用"RAII"只是因为它广为人知并使用,但我确实认为SBRM可以更好地描述真实意图.

其次,当RAII是新的时,它同样适用于收购,即释放资源.特别是,当时看到初始化分两步发生是相当普遍的.您首先定义一个对象,然后才动态分配与该对象关联的任何资源.许多样式指南提倡这一点,主要是因为当时(在C++有异常处理之前)没有好的方法来处理构造函数中的失败.因此,样式指南经常说,构造函数应该只做最少的工作,特别是避免任何可能失败的东西 - 特别是分配资源(还有一些仍然会说这样的东西).

相当多的人已经处理过释放析构函数中的资源,所以这与先前的实践没有明显的区别.