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

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

相关推荐
学习中.........17 分钟前
Karpathy nanoGPT 教程到底讲了什么
人工智能·算法·语言模型
城管不管31 分钟前
重生——第十次面试之开源中国一面挂
java·linux·开发语言·算法·面试·职场和发展·开源
三十岁老牛再出发1 小时前
08.18每日总结
c++·python·numpy·pandas
地平线开发者2 小时前
征程6|YOLOv5x 在 Horizon 征程6 上的端到端部署实践(下)
算法·自动驾驶
speop2 小时前
llm-algo-leetcode |Task01
算法·leetcode·职场和发展
神威难绷泪2 小时前
数据结构:哈希表 算法相关 排序算法
数据结构
艾为电子2 小时前
【应用方案】电视沉浸式音频升级: 电视音频 awinic“芯片 + 算法” 一体化解决方案
算法·音视频
余额瞒着我当琳2 小时前
C++--vector底层,leetcode118杨辉三角实战,对于传统reserve的坑点,迭代器失效
开发语言·c++
大熊背2 小时前
树莓派相机自动白平衡详解(二)
算法·白平衡·isppipeline
醉城夜风~2 小时前
(超详细)C++多态(Polymorphism)
开发语言·c++