MST
星途 面试题库

面试题:C++ 动态数组传参与边界检查优化

在C++ 中,通过 `new` 动态分配内存创建一个一维整数数组,并将其作为参数传递给一个函数。在函数内部既要高效地进行边界检查,又要考虑内存管理避免内存泄漏,同时在函数调用结束后正确释放动态分配的内存。请阐述完整的设计方案并给出详细代码实现,要求考虑异常安全等因素。
45.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 设计方案阐述
    • 使用 std::unique_ptr<int[]> 来管理动态分配的内存,这样可以确保在对象生命周期结束时自动释放内存,避免内存泄漏。
    • 在函数内部通过检查传入指针是否为 nullptr 以及数组的大小来进行边界检查。
    • 利用 try - catch 块来处理可能抛出的异常,保证异常安全。
  2. 代码实现
#include <iostream>
#include <memory>

// 函数声明
void processArray(std::unique_ptr<int[]> arr, size_t size);

int main() {
    size_t size = 5;
    try {
        // 动态分配内存创建一维整数数组
        std::unique_ptr<int[]> arr(new int[size]);
        // 给数组赋值(示例)
        for (size_t i = 0; i < size; ++i) {
            arr[i] = i;
        }
        // 调用函数处理数组
        processArray(std::move(arr), size);
    } catch (const std::exception& e) {
        std::cerr << "Exception caught: " << e.what() << std::endl;
    }
    return 0;
}

void processArray(std::unique_ptr<int[]> arr, size_t size) {
    if (!arr) {
        throw std::invalid_argument("Array pointer is nullptr");
    }
    // 这里可以进行数组的处理,例如打印数组元素
    for (size_t i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    // 函数结束时,std::unique_ptr 会自动释放内存
}