码迷,mamicode.com
首页 > 其他好文 > 详细

operator new

时间:2016-12-08 23:44:23      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:body   direct   color   structs   example   存储空间   cte   turn   exce   

document by C++:

系统的有三个声明:

throwing (1)
void* operator new (std::size_t size);
nothrow (2)
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
placement (3)
void* operator new (std::size_t size, void* ptr) noexcept;

定义:

  分配存储空间的接口。

  Allocate storage space

  Default allocation functions (single-object form).

 

特性:

  1.可替换,可重载

  2.系统定义的是全局函数

 

例子:

  

// operator new example
#include <iostream>     // std::cout
#include <new>          // ::operator new

struct MyClass {
  int data[100];
  MyClass() {std::cout << "constructed [" << this << "]\n";}
};

int main () {

  std::cout << "1: ";
  MyClass * p1 = new MyClass;
      // allocates memory by calling: operator new (sizeof(MyClass))
      // and then constructs an object at the newly allocated space

  std::cout << "2: ";
  MyClass * p2 = new (std::nothrow) MyClass;
      // allocates memory by calling: operator new (sizeof(MyClass),std::nothrow)
      // and then constructs an object at the newly allocated space

  std::cout << "3: ";
  new (p2) MyClass;
      // does not allocate memory -- calls: operator new (sizeof(MyClass),p2)
      // but constructs an object at p2

  // Notice though that calling this function directly does not construct an object:
  std::cout << "4: ";
  MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass));
      // allocates memory by calling: operator new (sizeof(MyClass))
      // but does not call MyClass‘s constructor

  delete p1;
  delete p2;
  delete p3;

  return 0;
}

 

  

operator new

标签:body   direct   color   structs   example   存储空间   cte   turn   exce   

原文地址:http://www.cnblogs.com/yiii/p/6146709.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!