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

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

相关推荐
qq_296553271 小时前
【LeetCode】最大子数组乘积:三种解法从暴力到最优
数据结构·算法·leetcode·职场和发展·动态规划·柔性数组
平行侠1 小时前
023Pollard-ρ 因子分解算法
数据结构·算法
tankeven1 小时前
C++ 封装
c++
谭欣辰1 小时前
C++倍增算法详解
数据结构·c++·算法
MATLAB代码顾问1 小时前
差分进化算法(DE)原理与Python实现
开发语言·python·算法
MicroTech20251 小时前
微算法科技(NASDAQ :MLGO)基于后量子密码学的动态BFT共识机制:QDBFT架构
科技·算法·密码学
Brilliantwxx1 小时前
【C++】认识 list(初步认识+模拟实现)
开发语言·数据结构·c++·笔记·算法·list
南宫萧幕1 小时前
锂电池二阶 RC 模型仿真实战:从理论解析到 Simulink 闭环搭建全流程
开发语言·人工智能·算法·机器学习
Hical_W1 小时前
Hical 踩坑实录五部曲(一):Boost.Asio 协程开发的 N 个坑
网络·c++·开源