关于C++中的placement new

初学者可能从来没听说过什么是 placement new。在国内有些地方会翻译为布置new 。而其作用主要是用于原位构造。

通常 new 操作是去向堆空间申请一块区域,而原位构造指的是在给出的指定目标进行构造。

具体的,我们来看下面的代码:

复制代码
#include <iostream>

struct Node {
    int num;
    Node(int _num) : num(_num) {
        std::printf("[%p] Node() num=%d\n", this, num);
    }

    ~Node() {
        std::printf("[%p] ~Node() num=%d\n", this, num);
    }
};

int main() {
    auto p = new Node(1);
    p      = new (p) Node(2);
    delete p;
}

输出结果为:

复制代码
[000002530bd01780] Node() num=1
[000002530bd01780] Node() num=2
[000002530bd01780] ~Node() num=2

可见构造函数调用了两次,析构调用了一次,且地址均相同。这就是对原始位置的操作。有了这一特性,能够非常方便的编写内存池以优化空间。

相关推荐
Pniubi21 分钟前
力扣146.LRU缓存机制
算法·leetcode·缓存
云上工程笔记23 分钟前
2026年7B到67B模型训练与推理GPU配置评测:LoRA、量化与全量微调对比
人工智能·算法·机器学习
softlgh24 分钟前
鼾声识别:嵌入式离线鼾声检测 SDK 与睡眠健康数据
算法·智能家居·智能音箱·鼾声识别·智能枕头·打呼噜
了了34 分钟前
图搜索基础学习笔记
算法
淡海水1 小时前
05-02-源码-Boehm GC标记阶段
算法·unity·c#·游戏引擎·gc
Code_Solitude2 小时前
传智杯备赛代码整理(前4题)
数据结构·算法
Jasmine_llq2 小时前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
Android小码家2 小时前
Vehicle 实战 自定义属性+测试demo
java·c++·framework·vhal·vehicle
hetao17338372 小时前
2026-10-19 hetao1733837 的刷题记录
c++·算法
夏虫不可与之言冰2 小时前
第三课 点亮 LED 与定时器非阻塞闪烁
c语言·c++·vscode·单片机·嵌入式硬件·物联网