面试题答案
一键面试#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int[]> arr(new int[10]);
for (int i = 0; i < 10; ++i) {
arr[i] = i;
}
for (int i = 0; i < 10; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
使用std::unique_ptr
管理数组而非传统的new[]
和delete[]
,主要原因如下:
- 自动内存管理:
std::unique_ptr
对象生命周期结束时,会自动调用delete[]
释放其所管理的内存,有效避免了忘记手动调用delete[]
导致的内存泄漏问题。而传统的new[]
和delete[]
需要程序员手动配对调用,一旦忘记调用delete[]
,就会产生内存泄漏。 - 异常安全:在使用传统
new[]
和delete[]
时,如果在new[]
之后、delete[]
之前发生异常,可能导致内存泄漏。而std::unique_ptr
基于RAII(Resource Acquisition Is Initialization)机制,在构造时获取资源,析构时释放资源,在异常发生时能保证资源的正确释放,具有更好的异常安全性。