Verisk C++ 面试注重内存管理和现C++ 特性。本文深度解析智能指针,csvosupport 助你掌握 C++ 核心
📋 核心考点
- 智能指针类型 - unique_ptr, shared_ptr, weak_ptr
- 内存管理 - RAII 原则
- 性能优化 - 移动语义
- 常见陷阱 - 循环引用
🎯 智能指针详解
unique_ptr
#include <memory>
#include <iostream>
class Resource {
public:
Resource() { std::cout << "Resource acquired\n"; }
~Resource() { std::cout << "Resource released\n"; }
};
void useUniquePtr() {
std::unique_ptr<Resource> ptr1 = std::make_unique<Resource>();
// 移动语义
std::unique_ptr<Resource> ptr2 = std::move(ptr1);
// ptr1 现在nullptr
// 自动释放资源
}
shared_ptr
void useSharedPtr() {
std::shared_ptr<Resource> ptr1 = std::make_shared<Resource>();
{
std::shared_ptr<Resource> ptr2 = ptr1;
std::cout << "Count: " << ptr1.use_count() << "\n"; // 2
}
std::cout << "Count: " << ptr1.use_count() << "\n"; // 1
}
weak_ptr(避免循环引用)
class Node {
public:
std::shared_ptr<Node> next;
std::weak_ptr<Node> prev; // 使用 weak_ptr 避免循环引用
};
🚀 面试常见问题
Q1: 什么时候使用哪种智能指针?
*csvosupport 建议
- unique_ptr: 独占所有权,默认选择
- shared_ptr: 共享所有权,多个对象需要访
- weak_ptr: 打破循环引用
Q2: 如何实现简单的智能指针
template<typename T>
class SmartPtr {
private:
T* ptr;
int* ref_count;
public:
SmartPtr(T* p = nullptr) : ptr(p), ref_count(new int(1)) {}
SmartPtr(const SmartPtr& other) {
ptr = other.ptr;
ref_count = other.ref_count;
(*ref_count)++;
}
~SmartPtr() {
(*ref_count)--;
if (*ref_count == 0) {
delete ptr;
delete ref_count;
}
}
T& operator*() { return *ptr; }
T* operator->() { return ptr; }
};
💼 csvosupport 助力
C++ 深度 - 现代 C++ 特 内存管理 - RAII 和智能指 代码实现 - 手写智能指针 性能优化 - 移动语义和完美转
联系 csvosupport,专C++ 面试辅助
*标签 #Verisk #C++ #智能指针 #内存管理 #VO辅助 #面试辅助 #一亩三分地
需要面试真题? 立刻联系微信 Coding0201,获得真题。