operator new

Posted shinymood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了operator new相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin学习之旅解决错误:kotlin.NotImplementedError: An operation is not implemented: Not yet implemented(代码片段

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'(代码片段

Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'(代码片段

svn报错cleanup failed–previous operation has not finished; run cleanup if it was interrupted的解决办法(代码片段

new-Operator 大幅增加了 Arduino 草图的大小 - 为啥?

INVALID HEAP ARGUMENT:用 operator new[] 分配,用 operator delete 释放