我生活在 C 和 C++ 泡沫中。我写过的任何超过几百行的东西都是用这两种语言写的。
我到处都听说 RAII(在大多数情况下)是 C++ 的独特用法。但为什么会这样呢?我相信大多数 OOP 语言都会强制您在堆上创建对象(如果我错了,请务必纠正我),这会导致希望 GC 完全处理内存管理。但是,一开始就让东西从堆栈中工作有什么错/不好?照原样实现有什么好处?
也许这首先导致我对堆的使用缺乏了解。除了在需要之前预先缓存大的东西之外,我不太“明白”它的意义。我 99.9% 的涉及指针的代码都只是与旧代码交互!
I hear around everywhere that RAII is (for the most part) a unique
idiom to C++.
因为大多数其他高级语言要么不直接支持它,要么鼓励您使用其他东西。 Java 是一个众所周知的例子,finalize
很少被使用。 C++ 是推广 RAII 的语言,因为它注重性能,同时需要异常安全和合理的资源管理。
RAII 主要与堆存储没有任何关系。它指定使用构造函数和析构函数来初始化和销毁资源或数据以及拥有这些资源的对象的习惯用法。从这个意义上讲,它还通过将资源绑定(bind)到对象及其生命周期来定义所有权。
But what's wrong/bad just having stuff work from the stack in the
first place?
如果您有 100MiB 的数据怎么办?当然,这不能在 8MiB 堆栈上进行。该堆栈是为小型且易于缓存的数据而设计的。例如。基本类型及其基本复合类型,但不包括大型数组。也许您的程序还没有处理大量数据。