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 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    JAVA中==与equals的区别
    spring面试重点
    struts2
    每个新手程序员必看的 SQL 指南
    QueryRunner的使用
    jquery GET POST
    jquery添加元素
    jquery 滑动动画
    jdbc 安装驱动
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8627666.html
Copyright © 2011-2022 走看看