← 返回博客列表
Verisk

Verisk C++ 面试:智能指针与内存管理

2025-09-24

Verisk C++ 面试注重内存管理和现C++ 特性。本文深度解析智能指针,csvosupport 助你掌握 C++ 核心

📋 核心考点

  1. 智能指针类型 - unique_ptr, shared_ptr, weak_ptr
  2. 内存管理 - RAII 原则
  3. 性能优化 - 移动语义
  4. 常见陷阱 - 循环引用

🎯 智能指针详解

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 建议

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,获得真题