实例分析:重载自定义参数的new

我们观察一下 placement new 的使用方式和重载方式。使用时就像函数一样有个小括号来表示传参,而接口不考虑第一个固定的 std::size_t,第二个参数开始正好与时候调用时一致。这和我们编写和使用函数非常类似。

是的,为了更加的方便和可拓展,标准也允许自定义接口的参数。

比如我们需要在 new 时传入一个数字和字符串,那么可以像下面这么写:

复制代码
#include <iostream>
#include <new>
#include <string>

void* operator new(std::size_t sz, std::string str, int num) {
    printf("[%d]call:%s %zu\n", __LINE__, __func__, sz);
    printf("[%d]params: %s %d\n", __LINE__, str.c_str(), num);

    if (sz == 0) {
        sz = 1;
    }
    if (void* ptr = std::malloc(sz)) {
        return ptr;
    }
    throw std::bad_alloc{};
}

int main() {
    auto p = new (__func__, __LINE__) int32_t;
}

运行的可能结果为下:

复制代码
[6]call:operator new 4
[7]params: main 19
相关推荐
王老师青少年编程4 分钟前
2025年6月GESP真题及题解(C++一级): 选择题和判断题(题解)
c++·真题·gesp·答案·csp·一级·信奥赛
Rabitebla5 分钟前
【Linux】 权限篇(三):深入理解 umask 位运算与粘滞位的设计思想
java·linux·服务器·c++·笔记·学习
czq_26867194877 分钟前
Python打卡第45天
开发语言·python
宇卿.9 分钟前
C#委托详解
开发语言·c#
ZoeLandia13 分钟前
React04:事件处理与受控表单
开发语言·前端·react.js·typescript
熊猫钓鱼>_>14 分钟前
端侧高斯泼溅(3DGS)渲染与性能调优初探:把“实景重建“跑在手机上【鸿蒙心迹】
开发语言·3d·华为·智能手机·harmonyos
量化炼金 (CodeAlchemy)21 分钟前
【Python】pandas vs polars 简单性能对比测试
开发语言·python·pandas
苦瓜汤补钙21 分钟前
Matlab 2022b(中文)的使用教程——Win11
开发语言·matlab
Ai-_Man21 分钟前
我需要批量导出Poe左边栏所有对话,而不是一条具体的对话内容,你们AI导出鸭可以吗?
开发语言·前端·javascript·人工智能·小程序