我应该将 RAII 应用于我分配的所有数组吗?

yua*_*ili 0 c++ raii

我现在正在学习 C++。这是一种非常复杂的语言,我不确定应该使用哪个功能以及何时使用。

C++ Primer 引入了 RAII 作为确保异常安全的方法。这是否意味着,作为一种良好的行为,当我想使用数组时,我应该将数组放入一个类中以分配和销毁资源。我知道我的想法很简单,或者说很幼稚。

我只是好奇什么是好的 C++ 编码行为。

dyn*_*mic 5

RAII 意味着资源与对象生命周期相关。
C++ 的每个 STL 类都遵循这个原则,这意味着如果你需要一个数组,你可以简单地使用std::vector.

当您的实例超出范围时,vector 类的析构函数将负责删除资源。

这意味着在你的情况下,而不是像这样使用 new:

int *array = new int[n];
Run Code Online (Sandbox Code Playgroud)

你应该使用:

vector<int> array(n);
Run Code Online (Sandbox Code Playgroud)

如果你真的需要在堆上分配一个共享指针并且使用 RAII 仍然是安全的,你可以这样做(需要 C++11):

shared_ptr<vector<int>> array(new vector<int>(10));
Run Code Online (Sandbox Code Playgroud)