MST

星途 面试题库

面试题:C++ 中按常量引用传递对象时的内存管理基础

在 C++ 中,假设有一个自定义类 `MyClass`,包含一个动态分配内存的成员变量 `int* data`。请编写一个函数 `void process(const MyClass& obj)`,函数体中不改变 `obj` 的内容,但是需要正确处理 `data` 所指向内存可能带来的内存泄漏问题。说明函数调用前后 `obj` 的内存状态。
36.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class MyClass {
public:
    MyClass() : data(new int(0)) {}
    ~MyClass() {
        delete data;
    }
private:
    int* data;
};

void process(const MyClass& obj) {
    // 这里不改变obj的内容,只是处理可能的内存泄漏
    // 由于obj是const引用,无法直接操作obj内部的data
    // 所以我们假设这里有某种需要“处理”内存的情况,比如输出相关信息来表示处理
    std::cout << "处理可能的内存泄漏(假设这里输出信息表示处理)" << std::endl;
}

函数调用前 obj 的内存状态

obj 中的 data 成员变量指向动态分配的内存,这块内存存储了一个 int 类型的数据。

函数调用后 obj 的内存状态

函数 process 不改变 obj 的内容,所以 obj 中的 data 仍然指向之前动态分配的那块内存,内存状态没有改变。当 obj 的生命周期结束时,其析构函数会释放 data 指向的内存,避免内存泄漏。