1

Last time I see some video where Mr. Stroustrup talking about RAII in C++. I wanted to know more and found this page:

https://www.securecoding.cert.org/confluence/display/cplusplus/MEM44-CPP.+Do+not+leak+resources+when+handling+exceptions

Is this MEM44-CPP just a proposal to the next specification of C++ or is it already available? How do I know my compilation tools supports RAII?

4

2 回答 2

9

RAII (Resource Acquisition Is Initialization) 是 C++ 固有的东西,或者更确切地说,当正确应用时,它可以用来缓解内存处理问题。

每个 C++ 编译器都“支持”RAII。

于 2013-09-20T13:03:47.710 回答
4

RAII 是一种设计模式,基于这样一个事实,即每当离开对象的范围时都会调用析构函数,并且无论离开范围的原因如何。随着设计模式的发展,它的使用仅限于具有析构函数的语言,只要离开对象的范围就会调用:C++ 和(我认为)Ada 95,尽管可能还有其他语言。

由于它是一种设计模式,它与编译器无关,只是它需要在正确的时间调用析构函数。这是 C++ 语言最早的一个特性,尽管早期的编译器经常出错。然而,我知道的最后一个在这方面存在问题的编译器是 Visual Studios 2008 中的 C++(它有时无法调用它应该有的析构函数)。自 1990 年代中期以来,大多数其他编译器都运行良好。

于 2013-09-20T14:02:28.793 回答