zoukankan      html  css  js  c++  java
  • placement new和delete

    注意,我们无法改变new和delete操作符。

    但是我们可以重载来里面的operator new 和 operator delete 方法,这个方法是被new操作符调用的,调用之后获得地址,会继续用构造函数初始化。

    另有一种operator new的方法叫作placement new,被禁止替换,(普通operator new可以替换,但一般不那么做),是两个参数,前面size_t被忽略,后面是地址,是直接用这个地址来调用构造函数。

    调用的时候,是普通的new 后面加个括号和地址。

    const size_t n = sizeof(string) * BUFFSIZE;

    string *sbuf = static_cast<string *> (::operator new(n));

    int size = 0;

    void append(string buf[], int &size, const string &val) {

    new (&buf[size++]) string(val);

    }

    void cleanup(string buf[], int size) {

      while (size) {

      buf[--size].~string();

      }

      ::operator delete(buf);

    }

    这种placement new的方式,广泛应用在大多数标准库容器的实现。

  • 相关阅读:
    随笔
    我的舅舅
    代码规范
    SpringMVC_乱码问题
    SpringMVC_接受请求及数据回显
    Restful风格
    第六周总结
    SpringMVC_控制器
    SpringMVC_初次使用
    SpringMVC_简介
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6479496.html
Copyright © 2011-2022 走看看