zoukankan      html  css  js  c++  java
  • 几种new

    http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html

    new 、operator new 和 placement new 区别

    (1)new :不能被重载,其行为总是一致的。它先调用operator new分配内存,然后调用构造函数初始化那段内存。

    new 操作符的执行过程:
    1. 调用operator new分配内存 ;
    2. 调用构造函数生成类对象;
    3. 返回相应指针。

    (2)operator new:要实现不同的内存分配行为,应该重载operator new,而不是new。

    operator new就像operator + 一样,是可以重载的。如果类中没有重载operator new,那么调用的就是全局的::operator new来完成堆的分配。同理,operator new[]、operator delete、operator delete[]也是可以重载的。

    (3)placement new:只是operator new重载的一个版本。它并不分配内存,只是返回指向已经分配好的某段内存的一个指针。因此不能删除它,但需要调用对象的析构函数。

    如果你想在已经分配的内存中创建一个对象,使用new时行不通的。也就是说placement new允许你在一个已经分配好的内存中(栈或者堆中)构造一个新的对象。原型中void* p实际上就是指向一个已经分配好的内存缓冲区的的首地址。

  • 相关阅读:
    js的同步和异步
    事件三
    事件2
    JS作用域题
    游戏之乐
    NSTimer(2)
    NSTimer
    理解 Objective-C Runtime
    iOS系统安全机制概览
    Which is the best of GCD, NSThread or NSOperationQueue?
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6363445.html
Copyright © 2011-2022 走看看