从STL源码剖析中看到了operator new的使用

template<class T>
inline void _deallocate(T* buffer) {::operator delete(buffer);//operator delete可以被重载
//    operator delete(buffer);
}

从而开始研究一下这两个操作符

首先其实迷惑的是"::"的作用,通过以下代码测试出来了

class A {
public:void TT() {cout << "A" << endl;}
};
inline void TT() {cout<<"G"<<endl;
}
class B: public A {
public:void TT() {cout << "B" << endl;::TT();}
};int main(int argc, char **argv) {
//  new Allocator();(new B())->TT();return 0;
}

运行结果

B
G

用于区分全局函数和函数内局部函数的符号。

#include <iostream>#include <vector>#include "2jjalloca.h"#include <new>

using namespace std;

//inline void *operator new(size_t n) {//    cout << "global new" << endl;//    return ::operator new(n);//}////inline void *operator new(size_t n, const std::nothrow_t& nt) {//    cout << "global new nothrow" << endl;//    return ::operator new(n, nt);//}

class Allocator {public:    void *operator new(size_t n) {        cout << "allocator new" << endl;        return ::operator new(n);    }    //作用域覆盖原则,即在里向外寻找operator new的重载时,    //只要找到operator new()函数就不再向外查找,如果参数符合则通过,    //如果参数不符合则报错,而不管全局是否还有相匹配的函数原型。    //所以的调用new(std::nothrow) Allocator;注释这个函数是报错    void* operator new(size_t n, const std::nothrow_t& nt) {        cout << "allocator new nothrow" << endl;        return ::operator new(n, nt);    }

    void* operator new(size_t n, void *p) {        cout << "allocator placement new" << endl;        return p;    }

    void operator delete(void *p) {        cout << "allocator delete" << endl;        return ::operator delete(p);    }    void operator delete(void*, void*) {        cout << "allocator placement delete" << endl;    }

    void* operator new[](size_t n) {        cout << "allocator new[]" << endl;        return ::operator new[](n);    }};

int main(int argc, char **argv) {//    Allocator *a = new Allocator;//    delete a;//    ::new Allcator;

    Allocator *a=new Allocator[10];    return 0;}

参考文章

C++ 内存分配(new,operator new)详解 (有些和我尝试的不一样,第四节可以着重参考)

转载于:https://www.cnblogs.com/Jacket-K/p/9337131.html

operator new和operator delete相关推荐

  1. 类的operator new与operator delete的重载

    为什么有必要写自己的operator new和operator delete? 答案通常是:为了效率. 缺省版本的operator new是一种通用型的内存分配器,它必须可以分配任意大小的内存块.同样 ...

  2. Cpp 对象模型探索 / operator new、operator delete、operator new[] 和 operator delete [] 重载

    零.前言 对于函数 operator new 和 operator delete 来说,分为全局重载和局部重载. 全局重载的形式: void *::operator new(size_t size); ...

  3. 实现自己的operator new和operator delete以及实现一个简单的内存池管理类

    为什么有必要写自己的operator new和operator delete? 为了效率.缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特 ...

  4. operator framework搭建operator开发环境

    简介 operator framework 是一个为云原生开发者提供开发operator的组件框架的开源项目,它目前包含三个组件: Operator SDK.集成controller-runtime, ...

  5. 【C++】operator bool() 和 operator const bool() const

    1.问题描述 在走读QtCreator源码时,看到如下运算符重载 源码在QtCreator-v4.9.2中 src\plugins\projectexplorer\projectexplorer.h ...

  6. C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏

    c/c++的动态内存管理 new/delete opeartor new/delete placement-new 内存泄漏 c/c++的动态内存管理 在开始之前首先要了解c和c++的内存分布,我简单 ...

  7. 通过从全局和类内部重载operator new /delete来获取内存管理权

    目录 1.通过重载获得内存管理权 2.容器的内存管理 3.重载new.array new.replacement new,接管内存控制权 1.重载全局::operator new / ::operat ...

  8. C++编程进阶3(如何写出正确的operator=、operator运算符的返回值以及是否应该是成员函数的讨论)

    八.如何写出一个安全的operator= 首先,operator=的返回值通常是一个类的引用,这一点需要和C++标准库的容器类的operator=保持一致 其次,如果一个类中含有指针成员,那么要防止自 ...

  9. EC笔记:第二部分:11:在operator=中处理“自我赋值”

    已经一年半没有写过博客了,最近发现学过的知识还是需要整理一下,为知笔记,要开始收费了以前写在为知笔记上笔记也会慢慢的转到博客里. 话不多说,进入正题. 考虑考虑以下场景: 当某个对象对自身赋值时,会出 ...

最新文章

  1. Google 全球员工围攻 Google!
  2. JVM垃圾回收机制总结(5) :JDK垃圾收集器的配置命令
  3. 【自适应(盲)均衡1】LMMSE、Godard、CMA常模、Sato等算法在信道均衡中的应用理论与MATLAB仿真
  4. react让我怀疑自己没有当程序员的天分怎么破?
  5. python app mysql_Python 操作 MySQL 的5种方式
  6. linux amd64 界面,linux脚本编程---ubuntu-12.04-server-amd64如何配置图形界面
  7. 上海的雨什么时候才可以停...
  8. 【python】Django设置SESSION超时时间没有生效?
  9. CSS:标签右对齐,文本框左对齐的实现
  10. Windows 关于Robocopy的使用详解
  11. 智能性与实用性兼具,华为开启智能眼镜全民时代
  12. linux mysql免安装版配置_Linux下MySQL免安装版安装配置记录
  13. 最近大火的chatGPT是什么?它是怎样聊天的?
  14. Linux部署docker容器(使用root用户登录)
  15. 电机的matlab仿真实例,电机控制Matlab仿真模型
  16. 细数20世纪最伟大的10大算法
  17. 基于eBox旋转编码器
  18. 从黑客文化看区块链开源社区的自我组织与成功之道
  19. 一人点赞,N人跟风?
  20. 新东方老罗(罗永浩)语录全集

热门文章

  1. node爬取app数据_在电销行业中,运营商大数据究竟起着怎样的作用
  2. form表单中,file选择图片后预览
  3. Eclipse中svn插件:Subclipse插件安装
  4. uniapp H5页面使用uni.request时,出现跨域问题
  5. Appium 与 Chromedriver
  6. c语言 元组顺序随机化,为什么关系中的元组没有先后顺序且不允许有重复元组?...
  7. 对PASCAL VOC 数据集进行数据增强
  8. Redirecting to binsystemctl start crond.service
  9. amd cpu 不兼容centos5.5_AMD放弃兼容性?这事简单也不简单
  10. mysql 线程_MySQL服务器线程数的查看方法详解