zoukankan      html  css  js  c++  java
  • 关于New,delete

    new delete 为表达式。这个过程不能重载,但是分解的步骤可以重载。

    String* ps = newe String("Hello")

    分解为:

      String* ps;

      void* mem =  operator new(sizeof(String));

      ps = static_cast<String*>(mem);

      ps->String::String("Hello")

    delete ps;

    分解为:

      String::~String(ps);

      Operator delete(ps)

    (一):这个影响的范围非常大

    重载::operator new,::operator delete

      ::operator new[],::operator delete[]

    void* myAlloc(size_t size)

    {  return malloc(size);  }

    void myFree(void* ptr)

    {  return free(ptr);  }

    inline void* operator new(size_t size)

    {  return myAlloc(size):  }

    (二)重载member operator new/delete,只影响个类

    class Foo{

    public:

      void* operator new[](size_t);

      void operator delete[](void*,size_t);

      //...

    };

    Foo*  = new Foo[N]; ====>try{

                  void* mem = operator new(sizeof(Foo) * N); p = static_cast<Foo*>(mem);p->Foo::Foo();

                  }

    ...

    delete [] p;  ====> p->~Foo(); operator delete(p);

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    Linux几个常用的目录结构
    Linux 安装composer
    Elasticsearch修改network后启动失败
    php7 闭包调用
    php 爬虫框架
    file_get_contents('php://input') 和POST的区别
    PHP指定日期转时间戳
    .Net 站点跨域问题及解决方法
    C# 多线程学习系列一
    Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8627666.html
Copyright © 2011-2022 走看看