关于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

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

相关推荐
Jack2011 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树13 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术1 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4562 天前
C++进阶(1)——前景提要
c++
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
夜悊2 天前
C++代码示例:进制数简单生成工具
c++