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 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    Javascript 面向对象编程
    __dirname与__filename
    解决动画播放完后恢复到初始状态的问题
    基于jQuery滚动加载页面内容效果的插件封装
    JQuery 方法
    CSS 尺寸介绍
    原生JS组件编写,构造函数封装步骤
    面试题原型链
    基础面试题——什么是盒子模型
    数组去重方法
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8627666.html
Copyright © 2011-2022 走看看