面试题答案
一键面试- 资源管理策略:
- 使用RAII(Resource Acquisition Is Initialization)原则,即通过对象的构造来获取资源,通过对象的析构来释放资源。
- 对于动态分配的指针,使用智能指针(如
std::unique_ptr
或std::shared_ptr
)来管理,避免手动释放资源带来的内存泄漏风险。
- 具体实现代码:
#include <iostream>
#include <memory>
class A {
public:
class B {
public:
B() : data(std::make_unique<int[]>(1000)) {
// 初始化大数组
}
~B() = default; // 智能指针会自动释放数组资源
private:
std::unique_ptr<int[]> data;
};
A() {
b = std::make_unique<B>();
}
~A() = default; // 智能指针会自动释放B对象资源
private:
std::unique_ptr<B> b;
};
int main() {
{
A a;
// 当a离开作用域时,A的析构函数会被调用,进而B的析构函数也会被调用,释放资源
}
return 0;
}
在上述代码中:
A
类包含一个std::unique_ptr<B>
成员变量b
,当A
对象构造时,会创建B
对象并由std::unique_ptr
管理。B
类包含一个std::unique_ptr<int[]>
成员变量data
,用于管理动态分配的大数组。B
的构造函数使用std::make_unique<int[]>(1000)
来分配数组资源,析构函数默认,由std::unique_ptr
在B
对象销毁时自动释放数组资源。- 当
A
对象被销毁时,其析构函数会自动调用b
的析构函数,从而确保B
对象被正确销毁,B
对象中的资源也能正确释放,避免内存泄漏。