跳转至

对象生命周期

是什么 / 解决什么问题

C++ 性能问题经常和生命周期问题绑定:拷贝过多、move 后误用、引用失效、未定义行为都会在低延迟系统里放大成稳定性问题。

RAII

RAII 用对象生命周期管理资源:

class Fd {
public:
    explicit Fd(int fd) : fd_(fd) {}
    ~Fd() { if (fd_ >= 0) close(fd_); }
private:
    int fd_;
};

move 语义

低延迟代码要避免不必要拷贝,但 move 不是零成本魔法。对小对象,拷贝可能足够快;对包含堆内存的对象,move 可以避免重新分配。

引用失效

std::vector<Order> orders;
Order* p = &orders[0];
orders.push_back(new_order); // 可能扩容,p 失效

热路径中保存容器元素指针时,要确认容器是否会移动元素。

常见未定义行为

  1. use-after-free
  2. 数据竞争
  3. 越界访问
  4. strict aliasing 违规
  5. 未对齐访问

面试高频问题

shared_ptr 是否适合热路径

通常不优先使用。引用计数更新是原子操作,可能引入 cache line 竞争。热路径更常见的是明确所有权、对象池或 arena。