MST

星途 面试题库

面试题:C++中std::unique_ptr管理数组的基础使用

请用C++的std::unique_ptr管理一个整数数组,数组大小为10,并对数组元素进行初始化,最后输出数组的所有元素。同时解释为什么使用std::unique_ptr管理数组而不是传统的new[]和delete[]。
45.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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)机制,在构造时获取资源,析构时释放资源,在异常发生时能保证资源的正确释放,具有更好的异常安全性。