STL 之 operator new 函数

在STL源码剖析中有提到operator new 这个函数,然后也有说道new 的下面会调用operator new,博主觉得这段话有问题,原因有二:
1、operator 是操作符的关键字,比如我们要重载一个操作符,我们的写法肯定是 operator xxx(xxx,xxx....),所以书中提到的调用operator new,我并不赞同,我觉得new 等同于 operator new
2、在C/C++里面,调用一般是涉及到函数层次的,谁调用谁,调试的时候也是有跳转的,然而博主在调试的时候,并没有看到new所在的函数,反而是直接跳到了operator new。下面给出博主的调试信息。

博主不太会截视频,就用一系列的图片来说明吧!



我们再看一下 数组的形式







这里进去了operator new[] 里层调用了operator new,但是这里并没有看到 new [] 所在的函数,而是直接跳转到了这里,可见new [] 等同于 operator new[],那么可以推测new 也是等同于 operator new的

还有一点,在我另一个博客(CSDN)也有吐槽过,操作符可以用函数名来调,也可以用typedef 以后的名称来调。

所以书中说new 调了operator new,太草率,没有足够的证据。

当然书中说 operator new 调了malloc,这点暂时是没错的,也请不要怀疑。

以上为博主自己的拙见,不足之处还请指正。

原文地址:https://blog.51cto.com/11753138/2446721

时间: 2024-10-25 20:34:14

STL 之 operator new 函数的相关文章

Python中的sorted函数以及operator.itemgetter函数

operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2,3] >>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值>>> b(a) 2 >>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值>&

Python中的sorted函数以及operator.itemgetter函数 【转载】

operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2,3] >>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值>>> b(a) 2 >>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值>&

【C++】【STL】二分查找函数

binary_search 这个函数的返回值是布尔型,也就是最简单的找到了就为真,没找到就是假. 传入参数有三个,数据集合的左端点,数据集合的右端点,查找的值. 注意这些左端点右端点是要求左开右闭原则的,就是和数学上的左开右闭区间[a, b)一样,右端点是个不会被查阅的值. 一般来说写法类似: bool flag = false; int data[n] = {...};///数据 sort(data, data + n); flag = binary_search(data, data + n

python中的operator.itemgetter函数

来自:https://blog.csdn.net/dongtingzhizi/article/details/12068205 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号,看下面例子: import operator a = [1, 2, 3] b = operator.itemgetter(1) # 定义函数b,获取对象的第1个域的值 print(b(a)) 结果:2 b = operator.itemgetter(1, 0) # 定义函数b,

python中operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. 1 k = [3,6,8] 2 b = operator.itemgetter(1) 3 print(b(k)) 4 #输出6 1 k = [3,6,8] 2 b = operator.itemgetter(2,0) 3 print(b(k)) 4 #输出(8, 3) 要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过

STL中的find_if函数【转载】

上一篇文章也讲过,find()函数只能处理简单类型的内容,也就是缺省类型,如果你想用一个自定义类型的数据作为查找依据则会出错!这里将讲述另外一个函数find_if()的用法 这是find()的一个更强大的版本.这个例子演示了find_if(),它接收一个函数对象的参数作为参数, 并使用它来做更复杂的评价对象是否和给出的查找条件相付.假设我们的list中有一些按年代排列的包含了事件和日期的记录.我们希望找出发生在1997年的事件. 代码如下: [c-sharp] view plaincopy //

c++STL之內建函数对象

STL内建了一些函数对象:算数仿函数.关系仿函数.逻辑仿函数 用法: 这些仿函数所产生的对象,用法和一般函数完全相同: 使用內建函数对象,需要引入头文件#<include><functional> 一.算数仿函数 #include<iostream> using namespace std; #include <functional> //内建函数对象头文件 //内建函数对象 算术仿函数 //negate 一元仿函数 取反仿函数 void test01()

stl::map之const函数访问

如何在const成员数中访问stl::map呢?例如如下代码: string ConfigFileManager::MapQueryItem(const string& name) const { if (_map_name_value.find(name) != _map_name_value.end()) { return _map_name_value[name]; } return ""; } 上面的代码会报错:error C2678: 二进制“[”: 没有找到接受“c

STL算法设计理念 - 二元函数,二元谓词以及在set中的应用

demo 二元函数对象 #include <iostream> #include <cstdio> #include <vector> #include <algorithm> using namespace std; template <typename T> class SumVector { public: T operator()(T t1, T t2) // 二元函数对象 { return t1 + t2; } protected: p