zoukankan      html  css  js  c++  java
  • C++中new的用法

    具体参考 《C++之 new 》http://www.cnblogs.com/yzy6806555/archive/2013/02/24/2924571.html
    在 C++ 中new有两种身份,一种是关键字,身份与sizeof等同,内置的;另外一种是函数。

    1. new作为关键字是最常见的用法。
    Class* ptr = new Class("rui");
    这句话会完成两个功能:
    a)调用operator new为类分配空间
    b)调用Class的对应的构造函数(例子中有参数)。
    在第二个过程中,如果发生异常(如读取丢失文件),那么可能会发生内存泄露。所以Symbian中有
    两段构造的解决方案(具体请google一下)。
     
    2. new作为函数不太常用,也不推荐使用。主要有两种用法
    1) 为类分配内存,其函数声明为
    void *operator new(size_t size);
    之前介绍的只在栈上生成对象就是声明类的new函数为private。
    其为 关键字new的第一个调用过程。new函数返回的是一个void指针,一块未经初始化的内存
    2)在已有的内存上(可以是堆内存或栈内存)分配对象,也称为placement new。其声明为
    void* operator new (std::size_t size, void* ptr) throw();
    可以看到其只是operator new 的一个重载版本 (多了个参数)。
    其会调用类的构造函数,初始化内存,作为关键字new的第二个过程。
    placement new主要适用于:
    a)在对时间要求非常高的应用程序中,因为这些程序分配的时间是确定的;
    b)长时间运行而不被打断的程序;
    c)以及执行一个垃圾收集器 (garbage collector)。

  • 相关阅读:
    java 通过Iterator输出Map
    java SortedSet接口swap方法
    java vector
    java Iterator双向迭代输出
    java 序列化和反序列化多个对象
    培训
    每天晚上

    又想起了

  • 原文地址:https://www.cnblogs.com/westfly/p/3054001.html
Copyright © 2011-2022 走看看