C++ 面试题 目录

C++ 中定位 new (placement new) 的用法?

推荐答案

-- -------------------- ---- -------
-------- ----------

----- ------- -
-------
    --------- -
        --------- -- -------- ------------- -- ----------
    -
    ---------- -
        --------- -- -------- ----------- -- ----------
    -
--

--- ------ -
    -- ------
    ---- ------------------------

    -- -- --------- --- ------------
    -------- --- - --- -------- ----------

    -- --------
    ----------------

    ------ --
-

本题详细解读

什么是 placement new?

Placement new 是 C++ 中的一种特殊形式的 new 操作符,它允许你在已经分配的内存上构造对象。与普通的 new 不同,placement new 不会分配内存,而是使用你提供的指针指向的内存来构造对象。

使用场景

  1. 内存池管理:当你需要手动管理内存时,placement new 可以在预先分配的内存块上构造对象,避免频繁的内存分配和释放。
  2. 性能优化:在某些对性能要求极高的场景中,placement new 可以减少内存分配的开销。
  3. 特殊内存区域:当对象需要构造在特定的内存区域(如共享内存、硬件寄存器等)时,placement new 是唯一的选择。

代码解析

  1. 内存分配

    这里我们预先分配了一块内存,大小足够容纳 MyClass 对象。

  2. 使用 placement new 构造对象

    这里我们使用 placement new 在 buffer 上构造 MyClass 对象。new (buffer) 表示在 buffer 指向的内存上构造对象。

  3. 显式调用析构函数

    由于 placement new 不会自动释放内存,因此需要显式调用析构函数来销毁对象。

注意事项

  • 内存对齐:确保预先分配的内存满足对象的对齐要求。
  • 内存管理:placement new 不会自动释放内存,因此需要手动管理内存的分配和释放。
  • 析构函数调用:使用 placement new 构造的对象必须显式调用析构函数,否则会导致资源泄漏。
纠错
反馈